Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
C# 通过选中组标题复选框选择所有组项目_C#_Wpf_Combobox - Fatal编程技术网

C# 通过选中组标题复选框选择所有组项目

C# 通过选中组标题复选框选择所有组项目,c#,wpf,combobox,C#,Wpf,Combobox,我已经实现了自定义组合框控件,其中集合项具有组。有组标题和以下组项。看起来是这样的: <Style TargetType="{x:Type GroupItem}" x:Key="ComboBoxNoGroupHeaderStyle"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupI

我已经实现了自定义组合框控件,其中集合项具有组。有组标题和以下组项。看起来是这样的:

<Style TargetType="{x:Type GroupItem}" x:Key="ComboBoxNoGroupHeaderStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <ItemsPresenter/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style TargetType="{x:Type GroupItem}" x:Key="ComboBoxDefaultGroupHeaderStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <ContentPresenter Grid.Row="0" />
                    <ItemsPresenter Grid.Row="1" Margin="20,0,0,0" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<ppstd:ComboBoxHeaderStyleSelector x:Key="ComboBoxGroupStyleSelector"
                                   ComboBoxNoGroupHeaderStyle="{StaticResource ComboBoxNoGroupHeaderStyle}"
                                   ComboBoxDefaultGroupHeaderStyle="{StaticResource ComboBoxDefaultGroupHeaderStyle}"/>
<DataTemplate x:Key="ComboBoxGroupHeaderTemplate">
    <CheckBox Content="{Binding Name}"
              FontWeight="Bold">
    //IsChecked={Binding IsHeaderCheckboxChecked}" tried this but DataContext is type of GroupItem, which has eg. Name property among others
    </CheckBox>
</DataTemplate>

<ComboBox >
    <ComboBox.GroupStyle >
        <GroupStyle
            ContainerStyleSelector = "{StaticResource ComboBoxGroupStyleSelector}"
            HeaderTemplate = "{StaticResource ComboBoxGroupHeaderTemplate}" / >
    </ComboBox.GroupStyle >
</ComboBox>

//IsChecked={Binding IsHeaderCheckboxChecked}“尝试了此操作,但DataContext是GroupItem的类型,其中包括eg.Name属性
它看起来很棒,但它缺少一个功能:通过选中组标题复选框来选择组项目。我认为这可以通过将
IsChecked
属性添加到
ComboBoxGroupHeaderTemplate
DataTemplate来完成,然后在设置此属性时实现此功能,但这并不像我想象的那么简单est,我现在很沮丧,不知道该怎么做

我听说过
行为
,但我从未使用过,我不知道这是实现这一点的好方法

问题是:有可能实现吗?如果有,如何实现?任何想法都会很有帮助。

在我看来,实现您所描述内容的最简单、最快速的方法是使用绑定:


<CheckBox x:Name="HeadCheckBox" Content="Header" />
<CheckBox Content="CheckBox1" IsChecked="{Binding ElementName=HeadCheckBox, Path=IsChecked, Mode=OneWay}" />
<CheckBox Content="CheckBox2" IsChecked="{Binding ElementName=HeadCheckBox, Path=IsChecked, Mode=OneWay}" />
<CheckBox Content="CheckBox3" IsChecked="{Binding ElementName=HeadCheckBox, Path=IsChecked, Mode=OneWay}" />
<CheckBox Content="CheckBox4" IsChecked="{Binding ElementName=HeadCheckBox, Path=IsChecked, Mode=OneWay}" />

现在可以单独选中每个复选框,但选中或取消选中标题会同时设置所有绑定的复选框

此解决方案的缺点是,如果只选中部分复选框,则最好将标题视为“未定义”(复选框具有“三态”选项)。
我问了一个关于如何获取标题()的三态的问题。我还不确定如何将其添加到您的解决方案中,因为即使“从属”复选框不是三态,它也会获取主状态(也是未定义的状态)。也许值转换器可以帮上忙。

最简单、最快(在我看来)实现所描述内容的方法是使用绑定:


<CheckBox x:Name="HeadCheckBox" Content="Header" />
<CheckBox Content="CheckBox1" IsChecked="{Binding ElementName=HeadCheckBox, Path=IsChecked, Mode=OneWay}" />
<CheckBox Content="CheckBox2" IsChecked="{Binding ElementName=HeadCheckBox, Path=IsChecked, Mode=OneWay}" />
<CheckBox Content="CheckBox3" IsChecked="{Binding ElementName=HeadCheckBox, Path=IsChecked, Mode=OneWay}" />
<CheckBox Content="CheckBox4" IsChecked="{Binding ElementName=HeadCheckBox, Path=IsChecked, Mode=OneWay}" />

现在可以单独选中每个复选框,但选中或取消选中标题会同时设置所有绑定的复选框

此解决方案的缺点是,如果只选中部分复选框,则最好将标题视为“未定义”(复选框具有“三态”选项)。
我问了一个关于如何获取标头()的三态的问题。我还不确定如何将其添加到您的解决方案中,因为即使“slave”复选框不是三态,它也会获取主状态(也是未定义的状态)。也许值转换器可以帮上忙