Wpf 带有切换按钮的菜单
我想创建窗口时,在左面板是菜单(与切换按钮),在右面板是视图。当我点击切换按钮时,视图和其他视图将被隐藏。但我的代码确实是开放的,尽管他自己。 这是我的代码:Wpf 带有切换按钮的菜单,wpf,togglebutton,Wpf,Togglebutton,我想创建窗口时,在左面板是菜单(与切换按钮),在右面板是视图。当我点击切换按钮时,视图和其他视图将被隐藏。但我的代码确实是开放的,尽管他自己。 这是我的代码: <StackPanel Grid.Column="0"> <ToggleButton Name="Button1" Checked="MenuItem_Checked"> <ToggleButton Name="Button2" Checked="MenuItem_Checked">
<StackPanel Grid.Column="0">
<ToggleButton Name="Button1" Checked="MenuItem_Checked">
<ToggleButton Name="Button2" Checked="MenuItem_Checked">
</StackPanel>
<administration:View1 Grid.Column="1"
Visibility="{Binding ElementName=Button1, Path=IsChecked, UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
<administration:View2 Grid.Column="1"
Visibility="{Binding ElementName=Button2, Path=IsChecked, UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
我猜,在循环中将IsChecked设置为false会导致这个问题,因为如果您在那里定义了任何未检查的项并设置了“\u current”,在第二次迭代期间\u current可能会按住未检查的切换按钮,在那里放置一个断点并自己检查,您可以通过包含如下标志来避免这个问题
bool internalChange = false;
private void MenuItem_Checked(object sender, RoutedEventArgs e)
{
if (!internalChange)
{
var el = sender as ToggleButton;
if (Equals(_current, el))
return;
_current = el;
foreach (var menuChild in Menu.Children)
{
ToggleButton button = menuChild as ToggleButton;
if (button == null)
continue;
if (!Equals(button, _current))
{
internalChange = true;
button.IsChecked = false;
internalChange = false;
}
}
}
}
我猜,在循环中将IsChecked设置为false会导致这个问题,因为如果您在那里定义了任何未检查的项并设置了“\u current”,在第二次迭代期间\u current可能会按住未检查的切换按钮,在那里放置一个断点并自己检查,您可以通过包含如下标志来避免这个问题
bool internalChange = false;
private void MenuItem_Checked(object sender, RoutedEventArgs e)
{
if (!internalChange)
{
var el = sender as ToggleButton;
if (Equals(_current, el))
return;
_current = el;
foreach (var menuChild in Menu.Children)
{
ToggleButton button = menuChild as ToggleButton;
if (button == null)
continue;
if (!Equals(button, _current))
{
internalChange = true;
button.IsChecked = false;
internalChange = false;
}
}
}
}
这是我的解决方案:
<View1.Resources>
<Style TargetType="View1">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Button1, Path=IsChecked, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</View1.Resources>
这是我的解决方案:
<View1.Resources>
<Style TargetType="View1">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Button1, Path=IsChecked, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</View1.Resources>
我设计了一个定制的chrome窗口、弹出式菜单和切换按钮。当“切换按钮”被选中属性设置为“真”时,弹出式菜单将打开,动画效果良好,当切换为“关闭”时弹出式菜单将关闭
我设计了一个定制的chrome窗口,弹出式菜单和切换按钮。当“切换按钮”被选中属性设置为“真”时,弹出式菜单将打开,动画效果良好,当切换为“关闭”时弹出式菜单将关闭