0

私は独自のコンボボックス スタイルを、スタイリッシュなコンボ ボックス アイテムと共に作成しました。ドロップダウンには、ボタン付きのアイテムと、次のように動的に作成されないアイテムを表示する必要があります。

            ComboBoxItem typeItem = new ComboBoxItem();
            typeItem.Content = "Test";
            typeItem.Tag = i;
            MyCombobox.Items.Add(typeItem);

私の質問は、このスタイルを一部のアイテムに適用し、他のアイテムに適用するにはどうすればよいですか?私の2つのコンボボックスアイテムは次のとおりです?

<Style x:Key="{x:Type ComboBoxItem}" TargetType="{x:Type ComboBoxItem}">
    <Setter Property="HorizontalContentAlignment" Value="Left" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
    <Setter Property="MinHeight" Value="{DynamicResource ResourceKey=MinimumIteractSizeDips}" />
    <Setter Property="MinWidth" Value="{DynamicResource ResourceKey=MinimumIteractSizeDips}" />
    <Setter Property="Foreground" Value="Black"/>
</Style>

<Style x:Key="MyComboBoxItem" TargetType="{x:Type ComboBoxItem}">
    <Setter Property="HorizontalContentAlignment" Value="Left" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
    <Setter Property="MinHeight" Value="{DynamicResource ResourceKey=MinimumIteractSizeDips}" />
    <Setter Property="MinWidth" Value="{DynamicResource ResourceKey=MinimumIteractSizeDips}" />
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ComboBoxItem">
                <Grid>
                    <Label Content="{TemplateBinding Content}" Foreground="Black" Background="White" Height="26" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Row="0" Grid.Column="0"/>
                    <Button Grid.Column="2" Grid.Row="0" Content="Settings" Height="23" HorizontalAlignment="Left" Margin="2" Name="PositionSettings" VerticalAlignment="Center" Width="57"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
4

1 に答える 1

0

StyleSelectorクラスを確認してください。

public class MyStyleSelector : StyleSelector
{
     public override Style SelectStyle(object item, DependencyObject container)
    {
        var element = container as FrameworkElement;
        var myVm = item as MyViewModel;

        if(myVm.EditMode)
            return element.FindResource("TemplateWithButtons") as DataTemplate
        return element.FindResource("TemplateNormal") as DataTemplate

    }
}

そしてxamlで、セレクターのリソースを定義します

<MyStyleSelector x:Key="myStyleSelector"/>

それをコンボボックスに適用します。

<ComboBox StyleSelector="{StaticResource myStyleSelector}"/>

ところで。x: と同じタイプのキーTargetTypeは冗長です。

最終的な注意: そのためにスタイルをオーバーライドしないでください。必要なのは、DataTemplate と DataTemplate セレクターです。また、Content(type オブジェクト) をラベル テキスト (type string) にバインドしないでください。ここでは ContentPresenter を使用します。

于 2012-07-24T09:14:57.653 に答える