我有一个UserControl,我希望有3种可能的状态:
-Main menu
-Config #1
-Config #2
(所有这三个都是具有各种按钮,文本框等的UserControl,并且父UserControl的状态将子控件设置为可见/不可见,具体取决于当前状态。)
主菜单状态具有进入2个配置状态之一的按钮(这两个状态都有'后退'按钮返回主菜单。)
实施此工作流程的“最简单”方法是什么?我是否需要手动查看更改并为每个按钮实现单击处理程序,更改父组件的状态? (我在Blend中这样做,所以我试图避免在VS之外编写C#代码。)
如果我目前的设计(UserControl w / states)使事情变得比它需要的更难,我会接受其他建议。 (这不是一个网页,只是一个常规应用程序,在主屏幕中有一些小屏幕导航+子屏幕导航。)
答案 0 :(得分:0)
您可以在UserControl上创建枚举(公开这三个值)属性,并使用xaml触发器修改视图(请参见下面的示例)。
为了根据菜单状态更改状态,您可以将所有菜单项单击事件解决为一个处理程序(或一个命令),将相应的枚举作为命令参数或使用Tag属性传递,然后设置当前的CurrentState属性。
另一种方法是使用StoryBoard绕过各州。
示例(用UserControl替换Window,抱歉):
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public CurrentState CurrentState
{
get { return (CurrentState)GetValue(CurrentStateProperty); }
set { SetValue(CurrentStateProperty, value); }
}
public static readonly DependencyProperty CurrentStateProperty =
DependencyProperty.Register("CurrentState", typeof(CurrentState),
typeof(MainWindow), new UIPropertyMetadata(CurrentState.MainMenu));
}
public enum CurrentState
{
MainMenu,
Config1,
Config2
}
的Xaml:
<Window
x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WpfApplication1">
<Window.Style>
<Style TargetType="{x:Type src:MainWindow}">
<Style.Triggers>
<Trigger Property="CurrentState" Value="MainMenu">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Style>
</Window>