我的ListBox
有一点问题
我可以点击文字检查CheckBox
,
但如果我点击背景,我就无法检查CheckBox
这让我感觉很糟糕......
我想我可以创建一种方法来解决我的问题,
但我想知道是否有财产可以轻松解决这个问题
谢谢你的帮助。
<ListBox x:Name="DeleteEntreesListBox">
<CheckBox x:Name="myTextBox" Content="Hello"/>
</ListBox>
如果我的光标在文本上,则该框为灰色且可以检查。
Screen
如果我的光标不在文本上但在背景上,则该框为白色,无法检查Screen
OnMouseLeftButtonDown
来处理它呢
通过左键选择的项目必须将框设置为检查..
答案 0 :(得分:1)
尝试设置与列表框(或任何其他父级)相同的宽度
<ListBox x:Name="DeleteEntreesListBox">
<CheckBox x:Name="myTextBox" Content="Hello" Width="{Binding ActualWidth,ElementName=DeleteEntreesListBox}"/>
</ListBox>
*编辑
您可以将IsChecked
绑定到祖先ListBoxItem的IsSelected
属性。
<CheckBox x:Name="myTextBox2" Content="Hello"
IsChecked="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListBoxItem}},
Path=IsSelected}"/>
或者,您可以更灵活地使用IValueConverter
并传入标识符SelectedIndex
等标识符+ ConverterParameter
匹配int
并转换为{{ 1}}如果匹配(或任何其他标识符)。
true
请注意,您需要在xaml中引用它,以便将int作为参数传递:
<ListBox x:Name="DeleteEntreesListBox">
<CheckBox x:Name="myTextBox1" Content="Hello">
<CheckBox.IsChecked>
<Binding Path="SelectedIndex" ElementName="DeleteEntreesListBox" Converter="{StaticResource IndexToBoolConverter}">
<Binding.ConverterParameter>
<sys:Int32>0</sys:Int32>
</Binding.ConverterParameter>
</Binding>
</CheckBox.IsChecked>
</CheckBox>
</ListBox>
并且转换器可以是这样的:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
虽然我认为你应该创建一个继承自class IndexToBoolConverter : IValueConverter
{
#region IValueConverter Members
object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (parameter != null && (int)value == (int)parameter)
{
return true;
}
else
return false;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)value == true)
return false;
else
return true;
}
#endregion
}
的自己的UserControl
,然后根据需要进行修改。