web-dev-qa-db-ja.com

コードビハインドでコントロールのStaticResourceスタイルを設定する

たとえば、(MainPage.xamlに)次のようなものがあります。

<Page.Resources>
    <Style TargetType="TextBlock" x:Key="TextBlockStyle">
        <Setter Property="FontFamily" Value="Segoe UI Light" />
        <Setter Property="Background" Value="Navy" />
    </Style>
</Page.Resources>

次に、そのStaticResourceスタイルを動的に作成したTextBlock(ファイルMainPage.xaml.cs)に適用したいと思います。

このようなことをする代わりにこれを行う可能性はありますか?

myTextBlock.FontFamily = new FontFamily("Segoe UI Light");
myTextBlock.Background = new SolidColorBrush(Color.FromArgb(255,0,0,128));
11
kodi1911

この質問をしてから4年以上経ちますが、私の発見を共有するためだけに回答を投稿したいと思います。

たとえば、App.xaml(Xamarin Cross-Platform App development)のアプリケーションリソースにStyleBlueButtonが記述されている場合、次のように使用できます。

<?xml version="1.0" encoding="utf-8" ?><Application xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
         x:Class="SharedUi.App">
<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="BlueButton" TargetType="Button">
            <Setter Property="TextColor" Value="White" />
            <Setter Property="FontSize" Value="20" />
            <Setter Property="BackgroundColor" Value="Blue"/>
            <Setter Property="HeightRequest" Value="70"/>
            <Setter Property="FontAttributes" Value="Bold"/>
        </Style>            
    </ResourceDictionary>
</Application.Resources></Application>

次に、背後のコードで

Button newButton1 = new Button
{
    Text = "Hello",
    WidthRequest = (double)15.0,
    Style = (Style)Application.Current.Resources["BlueButton"]
};
9
3not3

あなたは設定することができます、このようなもの、

  TextBlock myTextBlock= new TextBlock ()
    {
        FontFamily = new FontFamily("Segoe UI Light");
        Style = Resources["TextBlockStyle"] as Style,
    };
9
Sajeetharan

あなたはこれを使うことができます:

Style textBlockStyle;
try
{
    textBlockStyle = FindResource("TextBlockStyle") as Style;
}
catch(Exception ex)
{
    // exception handling
}

if(textBlockStyle != null)
{
    myTextBlock.Style = textBlockStyle;
}

またはTryFindResourceアプローチ:

myTextBlock.Style = (Style)TryFindResource("TextBlockStyle");
2
Hamlet Hakobyan