我是一名有用的助手,可以为您翻译文本。
现在,给定生成的控件,我想创建一个带有标题属性和复选框的ContextMenu,其中每个ContextMenu中的项目都绑定到相应控件的可见性。
我目前的代码是一个按钮,将打开一个上下文菜单,如下所示:
如何创建上下文菜单并将选项绑定到可见性?我被卡住了,因为我不确定如何正确设置绑定来实现这一点。
更多详情:
所以在上述ItemsControl中,它绑定到一个名为“属性”的属性列表,其中每个元素都实现:
根据Type字符串,我在上述内容中使用数据触发器来生成相应类型的正确控件,并将它们放置在被模板化为UniformGrid的ItemsControl中。
现在,我想要一个按钮,当点击时会呈现出ItemsControl中每个控件的名称列表,每个条目都可以勾选,勾选状态对应于ItemsControl中控件的可见性。
例如:如果ItemsControl网格如下所示:
当我点击按钮时,显示的上下文菜单将是:
如果我点击ContextMenu中的一个条目,比如说TextBox4,它会将TextBox4的可见性设置为false,而项目控件会显示为:
而上下文菜单将显示为:
我有一个ItemsControl,它绑定到ViewModel中的属性列表,并使用DataTemplate根据属性的类型自动生成适当的控件。
这是ItemsControl的代码:
<ItemsControl Grid.Column="0" ItemsSource="{Binding Properties}" >
<ItemsControl.Resources>
<DataTemplate x:Key="StringTemplate" DataType="{x:Type ui:ControlStringData}" >
<xctk:WatermarkTextBox Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Watermark="{Binding Path=Caption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Margin="5,5,5,5" />
</DataTemplate>
<DataTemplate x:Key="DateTimeTemplate" DataType="{x:Type ui:ControlDateTimeData}">
<xctk:DateTimePicker Value="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Watermark="{Binding Path=Caption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Margin="5,5,5,5" />
</DataTemplate>
<DataTemplate x:Key="DefaultTemplate" />
</ItemsControl.Resources>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl
x:Name="MyContentControl"
Content="{Binding}"
ContentTemplate="{StaticResource DefaultTemplate}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Type}" Value="DateTime">
<Setter TargetName="MyContentControl" Property="ContentTemplate"
Value="{StaticResource DateTimeTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Type}" Value="String">
<Setter TargetName="MyContentControl" Property="ContentTemplate"
Value="{StaticResource StringTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
现在,给定生成的控件,我想创建一个带有标题属性和复选框的ContextMenu,其中每个ContextMenu中的项目都绑定到相应控件的可见性。
我目前的代码是一个按钮,将打开一个上下文菜单,如下所示:
<Button Margin="5,5,5,5" Grid.Column="1" Grid.Row="0" Height="16" Width="16">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu />
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
如何创建上下文菜单并将选项绑定到可见性?我被卡住了,因为我不确定如何正确设置绑定来实现这一点。
更多详情:
所以在上述ItemsControl中,它绑定到一个名为“属性”的属性列表,其中每个元素都实现:
public interface IControlData
{
string Type { get; set; }
string Name { get; set; }
string Caption { get; set; }
bool Visibility { get; set; }
}
根据Type字符串,我在上述内容中使用数据触发器来生成相应类型的正确控件,并将它们放置在被模板化为UniformGrid的ItemsControl中。
现在,我想要一个按钮,当点击时会呈现出ItemsControl中每个控件的名称列表,每个条目都可以勾选,勾选状态对应于ItemsControl中控件的可见性。
例如:如果ItemsControl网格如下所示:
+----------+----------+
| TextBox1 | TextBox2 |
+----------+----------+
| TextBox3 | TextBox4 |
+----------+----------+
当我点击按钮时,显示的上下文菜单将是:
+---+----------+
| ✓ | TextBox1 |
| ✓ | TextBox2 |
| ✓ | TextBox3 |
| ✓ | TextBox4 |
+---+----------+
如果我点击ContextMenu中的一个条目,比如说TextBox4,它会将TextBox4的可见性设置为false,而项目控件会显示为:
+----------+----------+
| TextBox1 | TextBox2 |
+----------+----------+
| TextBox3 | |
+----------+----------+
而上下文菜单将显示为:
+---+----------+
| ✓ | TextBox1 |
| ✓ | TextBox2 |
| ✓ | TextBox3 |
| | TextBox4 |
+---+----------+