窗口打开,前面菜单栏前面小勾(图标显示)
代码和我上一编差不多,只不过在菜单界面,也就是主界面中加了一个定时器,去定时查看窗口就否开启。
IsCheckable="True" 是否显示小勾 IsChecked="True"第一次开启时 小勾能显示 因为我的工具窗口,软件一开启就会打开。
MainPageViewModel mainpageviewmodel;
public MainPage()
{
InitializeComponent();
//在这里窗体加载的时候不执行文本框赋值,
//窗体上不会及时的把时间显示出来,而是等待了片刻才显示了出来
ShowTime();
ShowTimer = new System.Windows.Threading.DispatcherTimer();
ShowTimer.Tick += new EventHandler(ShowCurTimer);//起个Timer一直获取当前时间
ShowTimer.Interval = new TimeSpan(0, 0, 0, 1, 0);
ShowTimer.Start();
mainpageviewmodel = new MainPageViewModel( );
this.DataContext = mainpageviewmodel;
}
这里是主窗口中,我本来就是要显示时间的。所以直接在这个定时器中判断了
//定时器时间显示当然,这里也能判断
public void ShowCurTimer(object sender, EventArgs e)
{
ShowTime();
//加上一些判断
//菜单中 工具栏小勾显示问题
if (mainpageviewmodel.toolflag == 1)
{
tool.IsChecked = true;
}
else
{
tool.IsChecked = false;
}
}
//ShowTime方法
private void ShowTime()
{
//获得年月日
this.tbDateText.Text = DateTime.Now.ToString("yyyy/MM/dd"); //yyyy/MM/dd
//获得时分秒
this.tbTimeText.Text = DateTime.Now.ToString("HH:mm:ss");
}
mainpageviewmodel.toolbar==null;toolbar窗口是不是为NULL;
///工具栏这里的win是个
///提升为公有方法,给热键(T)使用
/// </summary>
public void ToolBarExecute(Window window)
{
if (toolbar == null)
{
toolflag = 1;
//传参绑定
toolbar = new MyToolBar( this);
//固定窗口位置
toolbar.WindowStartupLocation = WindowStartupLocation.Manual;
toolbar.Left = 0;
toolbar.Top = 80;
toolbar.Owner = window;
toolbar.Show();
win.Add(toolbar);
}
else if(toolbar !=null )
{
//再次点击关闭窗口
toolbar.Close();
toolbar = null;
toolflag = 0;
win.Remove(toolbar);
}
//关闭窗口链表
List<Window> win=new List<Window> ();
主要是切换用户时 打开的窗口没关闭BUG,这时
public void LogoutCommandExecute(Window window)
{
/*打开登入窗口*/
Shell shell = new Shell();
shell.Show();
/*关闭当前窗口*/
if (window != null)
{
//window.Close();
//重写后 不能直接调用,
//注销前 关闭子窗口 当窗口过多可以用数组或链表
if (p_rail != null)
{
p_rail.Close();
p_rail = null;
}
//链表关闭
foreach (Window s in win)
{
s.Close();
}
//主窗口休眠
window.Hide();
window = null;
}
这里Sell为登入界面。。。
这里我重写了主窗口的关闭函数 主要是为了能在关闭时弹窗提示时否关闭程序。。。。