簡體   English   中英

WPF 自定義組合框在項目上顯示“System.Windows.Styles”

[英]WPF Custom ComboBox Showing "System.Windows.Styles" on item

我創建了一個自定義的 WPF ComboBox,如下所示:

<ComboBox 
    x:Name="ComboBoxBtn" 
    VerticalAlignment="Top" 
    HorizontalAlignment="Left" 
    Margin="0,0,0,-1" 
    Width="300" 
    ItemsSource="{Binding Source, RelativeSource={RelativeSource AncestorType=UserControl}}"
    SelectedItem="{Binding Path=Selected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}"
        IsSynchronizedWithCurrentItem="True">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <ContentControl>
                    <Style TargetType="ContentControl">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Favorite}" Value="True">
                                <Setter Property="Content">
                                    <Setter.Value>
                                        <Grid>
                                            <Grid.Style>
                                                <Style TargetType="Grid">
                                                    <Setter Property="Background" Value="#FFE6E6FA"/>
                                                </Style>
                                            </Grid.Style>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="Auto" />
                                                <ColumnDefinition Width="Auto" />
                                            </Grid.ColumnDefinitions>
                                            <Label Content="{Binding}" Width="250" />
                                            <Button Grid.Column="1" Command="{Binding AddCommandButton, ElementName=root}"
                                                CommandParameter="{Binding}">+</Button>
                                        </Grid>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Favorite}" Value="False">
                                <Setter Property="Content">
                                    <Setter.Value>
                                        <Grid>
                                            <Grid.Style>
                                                <Style TargetType="Grid">
                                                    <Setter Property="Background" Value="Yellow"/>
                                                </Style>
                                            </Grid.Style>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="Auto" />
                                                <ColumnDefinition Width="Auto" />
                                            </Grid.ColumnDefinitions>
                                            <Label Content="{Binding}" Width="250" />
                                            <Button Grid.Column="1" Command="{Binding RemoveCommandButton, ElementName=root}"
                                                CommandParameter="{Binding}">-</Button>
                                        </Grid>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ContentControl>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

Source 綁定包含一個 ObservableColleciton,其中客戶端有一個收藏夾字段,應該顯示不同的背景和不同的按鈕。 但是當我打開 ComboBox 時,所有項目都有:

“系統.Windows.樣式”

您的問題是您在內容控件中將樣式設置為內容。

<ContentControl>
    <Style TargetType="ContentControl">
    ...
    </Style>
</ContentControl>

為了設置內容控件的樣式,您應該添加:

<ContentControl.Style>

所以上面的代碼看起來像這樣:

<ContentControl>    
    <ContentControl.Style>
        <Style TargetType="ContentControl">
        ...
        </Style>    
    <ContentControl.Style>
</ContentControl>

編輯

順便說一句,對於更改背景的簡單任務,您的代碼非常復雜。 這是一個簡化版本:

    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Grid Name="PART_GRID" Background="Yellow">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <Label Content="{Binding}"
                       Width="250" />
                <Button Name="PART_BUTTON"
                        Grid.Column="1"
                        Content="-"
                        Command="{Binding AddCommandButton, ElementName=root}"
                        CommandParameter="{Binding}" />
            </Grid>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Favorite}"
                             Value="True">
                    <Setter TargetName="PART_GRID"
                            Property="Background"
                            Value="#FFE6E6FA" />
                    <Setter TargetName="PART_BUTTON"
                            Property="Content"
                            Value="+" />
                    <Setter TargetName="PART_BUTTON"
                            Property="Command"
                            Value="{Binding RemoveCommandButton, ElementName=root}" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ComboBox.ItemTemplate>

就我而言,我發現我有:

<ComboBox>
    <Style>
    </Style>
</ComboBox>

這是直接添加一個樣式作為一個項目,這類似於上面的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM