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


82

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}";

どちらの解決策も有効ではありませんでした。

どんな助けでもいただければ幸いです:)。


UserControlのコードビハインドからこれを行う理由はありますか?たぶんもっとエレガントな解決策があります。
csteinmueller 2012年

回答:


184

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

あなたはこれを書くべきです:

コードビハインドを使用している場合:

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

あなたがどこかにいるなら

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

結論:StyleキーワードTemplateでaに名前を付けないでください。最終的にStyleTemplate、とを混同することになります。これらは2つの異なる概念であるため、そうすべきではありません。


「Application」の代わりに「App」.Current.FindResource()を使用していることがわかりました。
alansiqueira27 2014年

FindResourceが見つかりません
ウェールズキング


それは私を大いに助けます。ありがとう^^
ドンKayt

3

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


10
nullの場合は、泣いたり、修正したりして、問題を修正できます。
アレン

0

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

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

MyStyleTemplateNameこのリソースとして定義する必要がある場合

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.