web-dev-qa-db-ja.com

コードでWPFラベルのStyleプロパティを設定しますか?

App.xamlには、次のコードがあります。

<Application.Resources>
    <Style x:Key="LabelTemplate" TargetType="{x:Type Label}">
        <Setter Property="Height" Value="53" />
        <Setter Property="Width" Value="130" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="Margin" Value="99,71,0,0" />
        <Setter Property="VerticalAlignment" Value= "Top" />
        <Setter Property="Foreground" Value="#FFE75959" />
        <Setter Property="FontFamily" Value="Calibri" />
        <Setter Property="FontSize" Value="40" />
    </Style>
</Application.Resources>

これは、ラベルの汎用テンプレートを提供するためのものです。

メインのXAMLコードには、次のコード行があります。

<Label Content="Movies" Style="{StaticResource LabelTemplate}" Name="label1" />

ただし、コードを使用してStyleプロパティを初期化します。私が試してみました:

label1.Style = new Style("{StaticResource LabelTemplate}");

そして

label1.Style = "{StaticResource LabelTemplate}";

どちらのソリューションも有効ではありませんでした。

助けていただければ幸いです:)。

72
Daniel

コードのどこでスタイルを取得しようとしていますか?コードビハインド?

これを書くべきです:

コードビハインドの場合:

Style style = this.FindResource("LabelTemplate") as Style;
label1.Style = style;

他の場所にいる場合

Style style = Application.Current.FindResource("LabelTemplate") as Style;
label1.Style = style;

下の注:キーワードStyleTemplateに名前を付けないでください。最終的にStyleTemplateを混同することになります。

160
Damascus

Nullスタイルの結果を確認してください。さもないと悲しいことになります... ... if(style!= null)this.Style = style;

3
Allen

古い質問かもしれませんが、W10 UWPアプリを試す場合は、各オブジェクトのリソースコレクションまたはアプリケーションオブジェクトのリソースコレクションを使用する必要があります

KeyValuePair<object,object> styl = this.Resources
    .Where(x => x.Key.ToString() == "MyStyleTemplateName")
    .FirstOrDefault();
if (styl.Value != null)
    Style MyStyle = (Style)styl.Value;

MyStyleTemplateNamethisのリソースとして定義する必要があります

0