我创建了一个带有3个复选框的菜单:“ menuRefreshFast”,“ menuRefreshMedium”和“ menuRefreshSlow”。
<controls:MenuItem Header="UI" FontFamily="Microsoft Sans Serif" TabIndex="103">
<CheckBox x:Name="menuRefreshFast" Content="Fast"></CheckBox>
<MenuFlyoutSubItem x:Name="menuRefresh" Text="Refresh Rate">
<MenuFlyoutItem>
<MenuFlyoutItem.Template>
<ControlTemplate TargetType="MenuFlyoutItem">
<CheckBox x:Name="menuRefreshFast" Content="Fast (250ms)" Click="menuRefreshFast_Click" Tag="menuRefreshFast"/>
</ControlTemplate>
</MenuFlyoutItem.Template>
</MenuFlyoutItem>
<MenuFlyoutItem>
<MenuFlyoutItem.Template>
<ControlTemplate TargetType="MenuFlyoutItem">
<CheckBox x:Name="menuRefreshMedium" Content="Medium (500ms)" Click="menuRefreshMedium_Click" Tag="menuRefreshMedium"/>
</ControlTemplate>
</MenuFlyoutItem.Template>
</MenuFlyoutItem>
<MenuFlyoutItem>
<MenuFlyoutItem.Template>
<ControlTemplate TargetType="MenuFlyoutItem">
<CheckBox x:Name="menuRefreshSlow" Content="Slow (1s)" Click="menuRefreshSlow_Click" Tag="menuRefreshSlow"/>
</ControlTemplate>
</MenuFlyoutItem.Template>
</MenuFlyoutItem>
</MenuFlyoutSubItem>
</controls:MenuItem>
当我加载应用程序时,我可以看到GUI做正确的事。但是,当我尝试使用x:Name引用这些复选框时,无法识别它们!有人可以向我解释原因吗?
答案 0 :(得分:0)
我不是这样做的,因此可以直接访问ControlTemplate中的项目,但是作为一个简单的解决方案,您可以做的是,在CheckBox的加载事件中,可以将该对象保存如下:
<CheckBox x:Name="menuRefreshFast" Content="Fast (250ms)" Click="menuRefreshFast_Click" Tag="menuRefreshFast" Loaded="menuRefreshFast_Loaded"/>
private CheckBox menuRefreshFast;
private void menuRefreshFast_Loaded(object sender, RoutedEventArgs e)
{
menuRefreshFast = sender as CheckBox;
}
答案 1 :(得分:0)
您不能直接使用控件名称从后面的页面代码访问XAML ControlTemplate中的控件。 ControlTemplate定义了用作控件的控件模板的元素树,其子元素不会显示在您的页面上,因此您无法从后面的页面代码中访问它。通常,我们使用VisualTreeHelper类,您可以从Internet上找到有关它的更多信息。在这种情况下,您还可以使用@Dishant中的方法来获取CheckBox。
但是,如果要使所选项目互斥,我建议您使用Radio buttons,可以对单选按钮进行分组,以使用户只能在单选按钮组中选择一个单选按钮。请参见Create a radio button部分,以使“单选”按钮成组工作。
这是基于您上面的代码的示例代码。
<controls:Menu>
<controls:MenuItem Header="UI" FontFamily="Microsoft Sans Serif" TabIndex="103">
<CheckBox x:Name="menuRefreshFast" Content="Fast"></CheckBox>
<MenuFlyoutSubItem x:Name="menuRefresh" Text="Refresh Rate">
<MenuFlyoutItem>
<MenuFlyoutItem.Template>
<ControlTemplate TargetType="MenuFlyoutItem">
<RadioButton x:Name="menuRefreshFast" GroupName="MyGroup" Content="Fast (250ms)" Click="menuRefreshFast_Click" Tag="menuRefreshFast"/>
</ControlTemplate>
</MenuFlyoutItem.Template>
</MenuFlyoutItem>
<MenuFlyoutItem>
<MenuFlyoutItem.Template>
<ControlTemplate TargetType="MenuFlyoutItem">
<RadioButton x:Name="menuRefreshMedium" GroupName="MyGroup" Content="Medium (500ms)" Click="menuRefreshMedium_Click" Tag="menuRefreshMedium"/>
</ControlTemplate>
</MenuFlyoutItem.Template>
</MenuFlyoutItem>
<MenuFlyoutItem>
<MenuFlyoutItem.Template>
<ControlTemplate TargetType="MenuFlyoutItem">
<RadioButton x:Name="menuRefreshSlow" GroupName="MyGroup" Content="Slow (1s)" Click="menuRefreshSlow_Click" Tag="menuRefreshSlow"/>
</ControlTemplate>
</MenuFlyoutItem.Template>
</MenuFlyoutItem>
</MenuFlyoutSubItem>
</controls:MenuItem>
</controls:Menu>