Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如果只有一个项目,如何隐藏组合框切换按钮?_Wpf_Xaml_Combobox_Visibility_Togglebutton - Fatal编程技术网

Wpf 如果只有一个项目,如何隐藏组合框切换按钮?

Wpf 如果只有一个项目,如何隐藏组合框切换按钮?,wpf,xaml,combobox,visibility,togglebutton,Wpf,Xaml,Combobox,Visibility,Togglebutton,我有一个WPF应用程序。在一个窗口中有一个组合框。如果只有一个项目,我想隐藏切换按钮并禁用组合框 我将如何实现这一点 我尝试了以下隐藏切换按钮的代码。但是运气不好 任何帮助都将不胜感激。谢谢 <ComboBox x:Name="CList" ItemsSource="{Binding Path=C}" > <Style TargetType="{x:Type ToggleButton}" > <Sty

我有一个WPF应用程序。在一个窗口中有一个组合框。如果只有一个项目,我想隐藏切换按钮并禁用组合框

我将如何实现这一点

我尝试了以下隐藏切换按钮的代码。但是运气不好

任何帮助都将不胜感激。谢谢

<ComboBox x:Name="CList" ItemsSource="{Binding Path=C}"  >                    
    <Style TargetType="{x:Type ToggleButton}" >
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Items.Count, ElementName=CList}" Value="1">
                <Setter Property="Visibility" Value="Hidden" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ComboBox>

您需要更改组合框的属性,并在其中实现触发器。您无法从外部访问模板中的控件


(您可以复制和修改,直接修改模板的一部分实际上是不可能的)

您也可以始终使用转换器:
(对不起,我没有完全阅读你的问题)

转换器 XAML
更好的解决方案是,当项目计数为零时,用控件模板(仅包含textblock)替换组合框的模板

这是同样的xaml

<ComboBox Name="CList" ItemsSource="{Binding Path=C}" 
                     SelectedItem="{Binding Path=CC}" VerticalAlignment="Center" Margin="0,0,10,0" >
                    <ComboBox.Style>
                        <Style TargetType="{x:Type ComboBox}" >
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=Items.Count, ElementName=CList}" Value="1">
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate>
                                                <TextBlock Text="{Binding Items[0], ElementName=CList}" />
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ComboBox.Style>
                </ComboBox>


我想隐藏切换按钮,而不是完全隐藏组合框。我也使用了此解决方案,效果很好,谢谢。我知道这是一篇老文章,但是当列表中的一个项目发生变化时,有没有办法更新文本框中的值?如果您已经为组合框创建了模板,这就不起作用了。@RandallDeetz和所有已经设置了模板的人,您可以在样式中添加
BasedOn=“{StaticResource{x:Type ComboBox}”
(在TargetType后面)。这为我解决了问题
<Window 
... 
...
xmlns:converters="clr-namespace:WPFSandbox">

<Window.Resources>
    <converters:ComboBoxItemCountToVisibilityConverter x:Key="ComboBoxItemCountToVisibilityConverter"/>
    <converters:ComboBoxItemCountToEnabledConverter x:Key="ComboBoxItemCountToEnabledConverter"/>
</Window.Resources>

<StackPanel>
   <ComboBox ItemsSource="{Binding C}" IsEnabled="{Binding Path=C.Count, Converter={StaticResource ComboBoxItemCountToEnabledConverter}}"/>
   <ToggleButton Visibility="{Binding Path=C.Count, Converter={StaticResource ComboBoxItemCountToVisibilityConverter}}"/>
</StackPanel>
<ComboBox Name="CList" ItemsSource="{Binding Path=C}" 
                     SelectedItem="{Binding Path=CC}" VerticalAlignment="Center" Margin="0,0,10,0" >
                    <ComboBox.Style>
                        <Style TargetType="{x:Type ComboBox}" >
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=Items.Count, ElementName=CList}" Value="1">
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate>
                                                <TextBlock Text="{Binding Items[0], ElementName=CList}" />
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ComboBox.Style>
                </ComboBox>