Wpf 如何将复选框项拉伸到组合框的整个宽度
我有一个带有复选框项的乘法组合框Wpf 如何将复选框项拉伸到组合框的整个宽度,wpf,combobox,stretch,multiplication,Wpf,Combobox,Stretch,Multiplication,我有一个带有复选框项的乘法组合框 <ComboBox x:Name="cmb" IsEditable="True" IsReadOnly="True" DropDownClosed="cmb_DropDownClosed"> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal">
<ComboBox x:Name="cmb" IsEditable="True" IsReadOnly="True" DropDownClosed="cmb_DropDownClosed">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding NmColumn }" HorizontalAlignment="Stretch"
IsChecked="{Binding Path=bChecked, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Tag="{Binding IdColumn}"
/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
当我点击复选框时,一切正常。但是如果复选框宽度小于组合框的宽度,当我单击复选框右侧时,组合框关闭。如何覆盖此行为 将
组合框中的水平内容对齐
设置为拉伸
。ItemContainerStyle
:
<ComboBox x:Name="cmb" IsEditable="True" IsReadOnly="True" DropDownClosed="cmb_DropDownClosed">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<CheckBox Content="{Binding NmColumn }" HorizontalAlignment="Stretch"
IsChecked="{Binding Path=bChecked, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Tag="{Binding IdColumn}"
/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
拉明的答案部分是好的。您还必须从数据模板中删除
。是他限制您的复选框在所有ComboboxItem宽度上展开
<ComboBox x:Name="cmb" IsEditable="True" IsReadOnly="True" DropDownClosed="cmb_DropDownClosed">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding NmColumn }" HorizontalAlignment="Stretch"
IsChecked="{Binding Path=bChecked, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Tag="{Binding IdColumn}"
/>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
所有答案对我都不适用。这个诡计是怎么设的 HorizontalContentAlignment=“拉伸” 对于复选框:
<ComboBox x:Name="combobox"
Background="White"
Padding="2"
Text="{Binding ElementName=DockPanelTemplateComboCheck, Path=ComboTextFilter}"
IsEditable="True"
IsReadOnly="True"
HorizontalAlignment="Stretch"
ItemsSource="{Binding ...}"
IsDropDownOpen="{Binding Path=DropOpen, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked}" Content="{Binding Eintrag}" HorizontalContentAlignment="Stretch" Checked="CheckBox_Checked_Unchecked" Unchecked="CheckBox_Checked_Unchecked"/>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
代码隐藏:
private string combotextfilter = "<No Selection>";
public string ComboTextFilter
{
get { return combotextfilter; }
set
{
if (value != null && value.IndexOf("ComboModel") != -1) return;
combotextfilter = value;
NotifyPropertyChanged(nameof(ComboTextFilter));
}
}
private void CheckBox_Checked_Unchecked(object sender, RoutedEventArgs e)
{
switch (((ObservableCollection<ComboModel>)combobox.ItemsSource).Count(x => x.IsChecked))
{
case 0:
ComboTextFilter = "<No Selection>";
break;
case 1:
ComboTextFilter = ((ObservableCollection<ComboModel>)combobox.ItemsSource).Where(x => x.IsChecked).First().Eintrag;
break;
default:
ComboTextFilter = ((ObservableCollection<ComboModel>)combobox.ItemsSource).Where(x => x.IsChecked).Select(x => x.Eintrag).Aggregate((i, j) => i + " | " + j);
//ComboTextFilter = "<Multiple Selected>";
break;
}
NotifyPropertyChanged(nameof(C_Foreground));
}
public bool DropOpen
{
get { return dropopen; }
set { dropopen = value; NotifyPropertyChanged(nameof(ComboTextFilter)); }
}
private bool dropopen = false;
私有字符串combotextfilter=”“;
公共字符串组合文本过滤器
{
获取{return combotextfilter;}
设置
{
if(value!=null&&value.IndexOf(“ComboModel”)!=-1)返回;
combotextfilter=值;
NotifyPropertyChanged(nameof(ComboTextFilter));
}
}
私有无效复选框\u选中\u未选中(对象发送方,路由目标)
{
开关(((ObservableCollection)combobox.ItemsSource.Count(x=>x.IsChecked))
{
案例0:
ComboTextFilter=“”;
打破
案例1:
ComboTextFilter=((ObservableCollection)combobox.ItemsSource).Where(x=>x.IsChecked.First().Eintrag;
打破
违约:
ComboTextFilter=((ObservableCollection)combobox.ItemsSource)。其中(x=>x.IsChecked)。选择(x=>x.Eintrag)。聚合((i,j)=>i+“|”+j);
//ComboTextFilter=“”;
打破
}
NotifyPropertyChanged(姓名(C_前台));
}
公共图书馆开放
{
获取{return dropopen;}
设置{dropopen=value;NotifyPropertyChanged(nameof(ComboTextFilter));}
}
private bool dropopen=false;
注意:此组合框还可以根据所选元素更改组合框的文本。我只知道Orientation=“Horizontal”是复制粘贴代码时的一种打字错误。它应该是垂直的。很抱歉