当觉得界面自带的最大化最小化关闭按钮不好看,或者想换个位置的时候,你需要自定义最大化最小化关闭按钮
最大化按钮有两种状态:最大化,跟还原状态两种显示方式。做法:定义command为SystemCommands.XXXCommand。本次使用了DataTemplateSelector,根据当前window的WindowState状态来判断当前窗体状态(如果没定义window需要在本窗体最开始,定义Name=“window”)
前端xaml代码
最大化模板
还原模板
后台TemplateSelector代码
///
/// 最大化与还原按钮状态模板选择器
///
public class MaxTemplateSelector : DataTemplateSelector
{
public DataTemplate MaxTemplate { get; set; }
public DataTemplate RestoreTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
//Window win = Application.Current.MainWindow;
//WindowState state = win.WindowState;
//必须判断是否为空,否则设计器无法操作
if (item == null)
return null;
WindowState state = (WindowState)item;
switch (state)
{
case WindowState.Normal:
return MaxTemplate;
case WindowState.Maximized:
return RestoreTemplate;
}
return null;
}
}
window最前面定义CommandBinding。
定义Executed事件方法
private void RestoreWindow_Exec(object sender, ExecutedRoutedEventArgs e)
{
SystemCommands.RestoreWindow(this);
}
private void MaximizeWindow_Exec(object sender, ExecutedRoutedEventArgs e)
{
SystemCommands.MaximizeWindow(this);
}
window最前面定义CommandBinding。
定义Executed事件方法
private void MinimizeWindow_Exec(object sender, ExecutedRoutedEventArgs e)
{
SystemCommands.MinimizeWindow(this);
}
中间引用的style: MetroWindowButtonStyle1
我这个程序UI框架是依赖于mahapp.metro,所以会引用到mahapp.metro的MetroWindowButtonStyle,然后我自己只是根据业务需求自定义了一下,本质可以直接用MetroWindowButtonStyle
看了下,MetroWindowButtonStyle是这么定义了