![](/img/trans.png)
[英]MenuItem IsCheckable property. The UI does not indicate that the menu item is checkable
[英]how to make only one item to be checkable in the menu item's list on enabling ischeckable=true of all items?
在我的代碼中,我嘗試實現只能在特定時間從菜單項中檢查一項,但是我的代碼給出了error-MenuKinect
(我的解決方案的名稱)是未聲明的前綴,請解釋如何解決此錯誤?
xaml code-
<Menu Height="23" Name="menu1" Width="171" Margin="10,10,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FF004165">
<MenuItem Header="Settings">
<Separator Style="{StaticResource SeparatorStyleKey}" />
<MenuItem x:Name="headerLogoutTime" Header="LogOut Time" Background="#FF004165">
<MenuItem x:Name="header10Min" Header="10 Min" Background="#FF004165" IsCheckable="True" MenuKinect:MenuItemExtensions.GroupName="LogOutTimeGroup" Style="{StaticResource MyMenuItem}" ></MenuItem>
<Separator Style="{StaticResource SeparatorStyleKey}" />
<MenuItem x:Name="header20Min" Header="20 Min" Background="#FF004165" IsCheckable="True" MenuKinect:MenuItemExtensions.GroupName="LogOutTimeGroup" Style="{StaticResource MyMenuItem}" ></MenuItem>
<Separator Style="{StaticResource SeparatorStyleKey}" />
<MenuItem x:Name="header30Min" Header="30 Min" Background="#FF004165" IsCheckable="True" MenuKinect:MenuItemExtensions.GroupName="LogOutTimeGroup" Style="{StaticResource MyMenuItem}" ></MenuItem>
<Separator Style="{StaticResource SeparatorStyleKey}" />
<MenuItem x:Name="header40Min" Header="40 Min" Background="#FF004165" IsCheckable="True" MenuKinect:MenuItemExtensions.GroupName="LogOutTimeGroup" Style="{StaticResource MyMenuItem}" ></MenuItem>
<Separator Style="{StaticResource SeparatorStyleKey}" />
<MenuItem x:Name="header50Min" Header="50 Min" Background="#FF004165" IsCheckable="True" MenuKinect:MenuItemExtensions.GroupName="LogOutTimeGroup" Style="{StaticResource MyMenuItem}" ></MenuItem>
<Separator Style="{StaticResource SeparatorStyleKey}" />
</MenuItem>
<Separator Style="{StaticResource SeparatorStyleKey}" />
<MenuItem Header="LogOut" Background="#FF004165" ></MenuItem>
<Separator Style="{StaticResource SeparatorStyleKey}" />
</MenuItem>
</Menu>
MenuItemExtensions.cs
public class MenuItemExtensions : DependencyObject
{
public static Dictionary<MenuItem, String> ElementToGroupNames = new Dictionary<MenuItem, String>();
public static readonly DependencyProperty GroupNameProperty =
DependencyProperty.RegisterAttached("GroupName",
typeof(String),
typeof(MenuItemExtensions),
new PropertyMetadata(String.Empty, OnGroupNameChanged));
public static void SetGroupName(MenuItem element, String value)
{
element.SetValue(GroupNameProperty, value);
}
public static String GetGroupName(MenuItem element)
{
return element.GetValue(GroupNameProperty).ToString();
}
private static void OnGroupNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//Add an entry to the group name collection
var menuItem = d as MenuItem;
if (menuItem != null)
{
String newGroupName = e.NewValue.ToString();
String oldGroupName = e.OldValue.ToString();
if (String.IsNullOrEmpty(newGroupName))
{
//Removing the toggle button from grouping
RemoveCheckboxFromGrouping(menuItem);
}
else
{
//Switching to a new group
if (newGroupName != oldGroupName)
{
if (!String.IsNullOrEmpty(oldGroupName))
{
//Remove the old group mapping
RemoveCheckboxFromGrouping(menuItem);
}
ElementToGroupNames.Add(menuItem, e.NewValue.ToString());
menuItem.Checked += MenuItemChecked;
}
}
}
}
private static void RemoveCheckboxFromGrouping(MenuItem checkBox)
{
ElementToGroupNames.Remove(checkBox);
checkBox.Checked -= MenuItemChecked;
}
static void MenuItemChecked(object sender, RoutedEventArgs e)
{
var menuItem = e.OriginalSource as MenuItem;
foreach (var item in ElementToGroupNames)
{
if (item.Key != menuItem && item.Value == GetGroupName(menuItem))
{
item.Key.IsChecked = false;
}
}
}
}
在根級別聲明名稱空間以在XAML中使用類對象。
您可以在根級別(窗口或UserControl)定義它,也可以在根菜單中定義它。
<Menu xmlns:MenuKinect="clr-namespace:Namespace_Name>"
將Namespace_Name
替換為定義MenuItemExtensions
類的實際名稱空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.