我正在尝试为ComboBox设置禁用项目,我有我的项目模型:
public class PermissionsViewItem
{
public string Title { get; set; }
public bool IsEnabled { get; set; }
}
ComboBox定义:
<ComboBox Background="WhiteSmoke" Margin="65,308,0,0" BorderThickness="0" Width="220" Padding="0" Foreground="#FF7B7A7F" ItemsSource="{Binding PermissionsViewItems}" >
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="local:PermissionsViewItem">
<StackPanel >
<Grid>
<Border Background="{x:Null}" BorderThickness="0" HorizontalAlignment="Left" VerticalAlignment="Center">
<TextBlock Text="{x:Bind Title}" FontWeight="SemiBold" />
</Border>
</Grid>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
然而似乎无法手动设置项目禁用,但是生成了ComboBoxItem元素(我可以在LiveVisualTree中看到它),它具有IsEnabled属性并且可以正常工作。我可以通过造型
访问它<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem" >
<Setter Property="IsEnabled" Value="False"/>
</Style>
</ComboBox.ItemContainerStyle>
这将禁用每个项目,但遗憾的是ItemContainerStyle不绑定到item,因为它具有ComboBox的上下文而不是PermissionsViewItem,所以我不能在这里使用PermissionsViewItem.IsEnabled属性。
是否有任何方法可以禁用特定项目(即使是hacky方式也足够了)?
答案 0 :(得分:0)
在TextBlock中绑定IsEnabled属性。
<TextBlock Text="{x:Bind Title}" FontWeight="SemiBold" IsEnabled="{Binding IsEnabled}" />
答案 1 :(得分:0)
您可以按如下所示重写组合框,并在运行时设置绑定。这对我有用
public class ZCombobox:ComboBox
{
protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item)
{
ComboBoxItem zitem = element as ComboBoxItem;
if (zitem != null)
{
Binding binding = new Binding();
binding.Path = new PropertyPath("IsSelectable");
zitem.SetBinding(ComboBoxItem.IsEnabledProperty, binding);
}
base.PrepareContainerForItemOverride(element, item);
}
}