12

エキスパンダーの次のコードがあります。

   <Expander Name="CompanyLinks" Header="{StaticResource companyLinksHeader}"
              FontSize="18" FontFamily="Calibri" FontWeight="Bold">
        <StackPanel>
            <Label Content="{StaticResource companyLinksItemSummary}" 
                   FontSize="14" FontFamily="Calibri" FontWeight="Bold"/>
            <Label Content="{StaticResource companyLinksItemInfo}" 
                   FontSize="14" FontFamily="Calibri" FontWeight="Bold"/>
            <Label Content="{StaticResource companyLinksItemIssues}" 
                   FontSize="14" FontFamily="Calibri" FontWeight="Bold"/>
            <Label Content="{StaticResource companyLinksItemMessages}" 
                   FontSize="14" FontFamily="Calibri" FontWeight="Bold"/>
        </StackPanel>   
    </Expander>

StaticResourcesは次のように定義されています(私のリソースディクショナリでは)。

<sys:String x:Key="companyLinksHeader">company</sys:String>
<sys:String x:Key="companyLinksItemSummary">summary</sys:String>
<sys:String x:Key="companyLinksItemInfo">info</sys:String>
<sys:String x:Key="companyLinksItemIssues">issues</sys:String>
<sys:String x:Key="companyLinksItemMessages">messages</sys:String>

ヘッダーとラベルのフォントスタイルを処理する辞書エントリ(または他の何か)を定義して、同じフォントを何度も定義する必要がないようにする方法はありますか(そして、1か所で変更するだけです)。フォントを変更したい)?

編集

私は解決策を見つけ(投稿したものに感謝します)、StackPanelラベルアイテムに次のスタイルを使用しています:

<!-- Expander Items text style -->
<Style x:Key="expanderItemsTextStyle">
    <Setter Property="Label.FontFamily" Value="Trebuchet MS"></Setter>
    <Setter Property="Label.FontWeight" Value="Normal"></Setter>
    <Setter Property="Label.FontSize" Value="14"></Setter>
    <Setter Property="Label.Foreground" Value="Aqua"></Setter>
</Style>

そしてそれをこのように実装します(すべてのラベルに影響するようにStackPanelに適用します):

<Expander Name="CompanyLinks" Header="{StaticResource companyLinksHeader}"
          Style="{StaticResource expanderHeaderTextStyle}">
    <StackPanel Style="{StaticResource expanderItemsTextStyle}">
        <Label Content="{StaticResource companyLinksItemSummary}"/>
        <Label Content="{StaticResource companyLinksItemInfo}" />
        <Label Content="{StaticResource companyLinksItemIssues}" />
        <Label Content="{StaticResource companyLinksItemMessages}" />
    </StackPanel>   
</Expander>

ただし、機能しないものの1つは、Label.Foregroundです。前景色は黒のままですが、スタイルを使用してフォント、サイズ、または太さを変更できます。色は機能しますが、スタイルをラベル定義に移動すると。これはバグですか、それともStackPanelラベルのフォントの色(前景)を設定する別のプロパティがありますか。

4

3 に答える 3

16

Style内で使用でき、セクション内でBasedOnWindow.Resourcesを使用してこのスタイルを参照できます。これにより、その中のすべてのラベルにスタイルが適用されます。 StackPanel.ResourcesStackPanel

<Window>
    <Window.Resources>
        <Style x:Key="myLabelStyle" TargetType="{x:Type Label}">
            <Setter Property="FontSize" Value="14" />
            <Setter Property="FontFamily" Value="Calibri" />
            <Setter Property="FontWeight" Value="Bold" />
         </Style>
    </Window.Resources>
    <Expander Name="CompanyLinks" Header="{StaticResource companyLinksHeader}"
              FontSize="18" FontFamily="Calibri" FontWeight="Bold">
        <StackPanel>
            <StackPanel.Resources>
                <Style BasedOn="{StaticResource myLabelStyle}" TargetType="{x:Type Label}" />
            </StackPanel.Resources>
            <Label Content="{StaticResource companyLinksItemSummary}" />
            <Label Content="{StaticResource companyLinksItemInfo}" />
            <Label Content="{StaticResource companyLinksItemIssues}" />
            <Label Content="{StaticResource companyLinksItemMessages}" />
        </StackPanel>
    </Expander>
</Window>
于 2012-12-12T17:31:57.053 に答える
5

スタイルを使用する:

<Expander Name="CompanyLinks" Header="{StaticResource companyLinksHeader}"
          FontSize="18" FontFamily="Calibri" FontWeight="Bold">
    <Expander.Resources>
        <Style TargetType="Label">
            <Setter Property="FontSize" Value="14" />
            <Setter Property="FontFamily" Value="Calibri" />
            <Setter Property="FontWeight" Value="Bold" />
        </Style>
    </Expander.Resources>
    <StackPanel>
        <Label Content="{StaticResource companyLinksItemSummary}" />
        <Label Content="{StaticResource companyLinksItemInfo}" />
        <Label Content="{StaticResource companyLinksItemIssues}" />
        <Label Content="{StaticResource companyLinksItemMessages}" />
    </StackPanel>
</Expander>

ここでは、すべての内のStyleターゲット。LabelExpander

于 2012-12-12T17:28:59.397 に答える
0

リソースファイルでフォントサイズとフォント名を宣言します

<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>


<Label Content="{StaticResource companyLinksItemMessages}" 
      FontSize="{StaticResource BaseFontSize}" FontFamily="{StaticResource fntfam}"/>
于 2012-12-12T17:28:09.427 に答える