2

MainWindow.Resources で次のスタイルが定義されています。

<Style TargetType="{x:Type ComboBox}">
    <Setter Property="Height" Value="26"/>
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="{Binding}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Width" Value="358"/>
</Style>
<Style TargetType="{x:Type TextBlock}">
    <Setter Property="MaxWidth" Value="350"/>
    <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
</Style>

TextBlock スタイルは、MainWindow 内で定義された TextBlock 要素に対して機能しますが、ComboBox の DataTemplate として使用される TextBlock に対しては機能しません。なんで?

要素自体の内部に TextBlock プロパティを設定すると、すべて正常に動作します。

<Style TargetType="{x:Type ComboBox}">
    <Setter Property="Height" Value="26"/>
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock MaxWidth="350" Text="{Binding}" TextTrimming="CharacterEllipsis" VerticalAlignment="Center"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Width" Value="358"/>
</Style>
4

2 に答える 2

2

テンプレートには異なる範囲の並べ替えがあり、Application.Resourcesデータ内でも適用されるスタイルに移動して、アプリケーション全体のテンプレートを制御できます。

于 2013-05-05T16:34:15.907 に答える
0

動的リソースを使用する

 <DataTemplate DataType="{x:Type local:DataSource}">
     <TextBox Style="{DynamicResource TextBoxStyle}" Text="{Binding}"  />
</DataTemplate>

<ComboBox>
     <ComboBox.Resources>
             <Style x:Key="TextBoxStyle" BasedOn="{StaticResource {x:Type ListBoxItem}}" TargetType="TextBox">
        </Style>
    </ComboBox.Resources>
</ComboBox>
于 2013-05-05T16:33:49.420 に答える