为两个 WPF 创建摘要 Windows
Creating an abstract for two WPF Windows
我正在尝试减少下面的代码,以便我可以从 window(KPIViewVAS 或 KPIView)调用 'KeyHandler_F' 并使用 [= 执行对 window 状态的更改21=]。下面的代码有效但不是 DRY:
namespace KPI_Monitor_WPF.UI
{
class FullScreen
{
public abstract class A<KPIViewVAS>
{
public abstract void KeyHandler_F(object sender, KeyEventArgs e, KPIViewVAS KVV);
protected abstract void ToggleWindow(KPIViewVAS KVV);
}
public class B : A<KPIViewVAS>
{
public override void KeyHandler_F(object sender, KeyEventArgs e, KPIViewVAS KVV)
{
if (e.Key == Key.F)
{
ToggleWindow(KVV);
}
}
protected override void ToggleWindow(KPIViewVAS KVV)
{
switch (KVV.WindowState)
{
case (WindowState.Maximized):
{
KVV.WindowState = WindowState.Normal;
KVV.WindowStyle = WindowStyle.ToolWindow;
}
break;
default:
{
KVV.WindowState = WindowState.Maximized;
KVV.WindowStyle = WindowStyle.None;
}
break;
}
}
}
public class C : A<KPIView>
{
public override void KeyHandler_F(object sender, KeyEventArgs e, KPIView KVV)
{
if (e.Key == Key.F)
{
ToggleWindow(KVV);
}
}
protected override void ToggleWindow(KPIView KVV)
{
switch (KVV.WindowState)
{
case (WindowState.Maximized):
{
KVV.WindowState = WindowState.Normal;
KVV.WindowStyle = WindowStyle.ToolWindow;
}
break;
default:
{
KVV.WindowState = WindowState.Maximized;
KVV.WindowStyle = WindowStyle.None;
}
break;
}
}
}
}
}
我开始使用下面的示例减少代码,但是一旦我将 'ToggleWindow' 的命令移动到摘要 class 下,我就收到错误消息,指出 'KVV.WindowState' 找不到:
class FullScreen
{
public abstract class A<KPIViewVAS>
{
public virtual void KeyHandler_F(object sender, KeyEventArgs e, KPIViewVAS KVV) {
if (e.Key == Key.F)
{
ToggleWindow(KVV);
}
}
public virtual void ToggleWindow(KPIViewVAS KVV)
{
switch (KVV.WindowState)
{
case (WindowState.Maximized):
{
KVV.WindowState = WindowState.Normal;
KVV.WindowStyle = WindowStyle.ToolWindow;
}
break;
default:
{
KVV.WindowState = WindowState.Maximized;
KVV.WindowStyle = WindowStyle.None;
}
break;
}
}
}
}
public class B : A<KPIViewVAS>
{
public override void KeyHandler_F(object sender, KeyEventArgs e, KPIViewVAS KVV)
{
}
public override void ToggleWindow(KPIViewVAS KVV)
{
}
}
public class C : A<KPIView>
{
public override void KeyHandler_F(object sender, KeyEventArgs e, KPIView KVV)
{
}
protected override void ToggleWindow(KPIView KVV)
{
}
}
}
下面是windows'KPIViewVAS'和'KPIView'
public partial class KPIViewVAS : Window
{
public KPIViewVAS()
{
InitializeComponent();
}
private void KeyHandler_F(object sender, KeyEventArgs e)
{
FullScreen.B switchScreen = new FullScreen.B();
switchScreen.KeyHandler_F(sender, e, this);
}
}
public partial class KPIView : Window
{
public KPIView()
{
InitializeComponent();
}
private void KeyHandler_F(object sender, KeyEventArgs e)
{
FullScreen.A switchScreen = new FullScreen.A();
switchScreen.KeyHandler_F(sender, e, this);
}
}
根据 Peter Duniho 关于使用动态代码的建议,代码已减少且没有任何错误。任何 window 都可以通过
使用代码
private void KeyHandler_F(object sender, KeyEventArgs e)
{
fullScreen.adjustScreen switchScreen = new fullScreen.adjustScreen();
switchScreen.KeyHandler_F(sender, e, this);
}
并且 class 缩减为:
public class fullScreen
{
public class adjustScreen
{
public void KeyHandler_F(object sender, KeyEventArgs e, dynamic KVV)
{
if (e.Key == Key.F)
{
ToggleWindow(KVV);
}
}
private void ToggleWindow(dynamic KVV)
{
switch (KVV.WindowState)
{
case (WindowState.Maximized):
{
KVV.WindowState = WindowState.Normal;
KVV.WindowStyle = WindowStyle.ToolWindow;
}
break;
default:
{
KVV.WindowState = WindowState.Maximized;
KVV.WindowStyle = WindowStyle.None;
}
break;
}
}
}
}
我正在尝试减少下面的代码,以便我可以从 window(KPIViewVAS 或 KPIView)调用 'KeyHandler_F' 并使用 [= 执行对 window 状态的更改21=]。下面的代码有效但不是 DRY:
namespace KPI_Monitor_WPF.UI
{
class FullScreen
{
public abstract class A<KPIViewVAS>
{
public abstract void KeyHandler_F(object sender, KeyEventArgs e, KPIViewVAS KVV);
protected abstract void ToggleWindow(KPIViewVAS KVV);
}
public class B : A<KPIViewVAS>
{
public override void KeyHandler_F(object sender, KeyEventArgs e, KPIViewVAS KVV)
{
if (e.Key == Key.F)
{
ToggleWindow(KVV);
}
}
protected override void ToggleWindow(KPIViewVAS KVV)
{
switch (KVV.WindowState)
{
case (WindowState.Maximized):
{
KVV.WindowState = WindowState.Normal;
KVV.WindowStyle = WindowStyle.ToolWindow;
}
break;
default:
{
KVV.WindowState = WindowState.Maximized;
KVV.WindowStyle = WindowStyle.None;
}
break;
}
}
}
public class C : A<KPIView>
{
public override void KeyHandler_F(object sender, KeyEventArgs e, KPIView KVV)
{
if (e.Key == Key.F)
{
ToggleWindow(KVV);
}
}
protected override void ToggleWindow(KPIView KVV)
{
switch (KVV.WindowState)
{
case (WindowState.Maximized):
{
KVV.WindowState = WindowState.Normal;
KVV.WindowStyle = WindowStyle.ToolWindow;
}
break;
default:
{
KVV.WindowState = WindowState.Maximized;
KVV.WindowStyle = WindowStyle.None;
}
break;
}
}
}
}
}
我开始使用下面的示例减少代码,但是一旦我将 'ToggleWindow' 的命令移动到摘要 class 下,我就收到错误消息,指出 'KVV.WindowState' 找不到:
class FullScreen
{
public abstract class A<KPIViewVAS>
{
public virtual void KeyHandler_F(object sender, KeyEventArgs e, KPIViewVAS KVV) {
if (e.Key == Key.F)
{
ToggleWindow(KVV);
}
}
public virtual void ToggleWindow(KPIViewVAS KVV)
{
switch (KVV.WindowState)
{
case (WindowState.Maximized):
{
KVV.WindowState = WindowState.Normal;
KVV.WindowStyle = WindowStyle.ToolWindow;
}
break;
default:
{
KVV.WindowState = WindowState.Maximized;
KVV.WindowStyle = WindowStyle.None;
}
break;
}
}
}
}
public class B : A<KPIViewVAS>
{
public override void KeyHandler_F(object sender, KeyEventArgs e, KPIViewVAS KVV)
{
}
public override void ToggleWindow(KPIViewVAS KVV)
{
}
}
public class C : A<KPIView>
{
public override void KeyHandler_F(object sender, KeyEventArgs e, KPIView KVV)
{
}
protected override void ToggleWindow(KPIView KVV)
{
}
}
}
下面是windows'KPIViewVAS'和'KPIView'
public partial class KPIViewVAS : Window
{
public KPIViewVAS()
{
InitializeComponent();
}
private void KeyHandler_F(object sender, KeyEventArgs e)
{
FullScreen.B switchScreen = new FullScreen.B();
switchScreen.KeyHandler_F(sender, e, this);
}
}
public partial class KPIView : Window
{
public KPIView()
{
InitializeComponent();
}
private void KeyHandler_F(object sender, KeyEventArgs e)
{
FullScreen.A switchScreen = new FullScreen.A();
switchScreen.KeyHandler_F(sender, e, this);
}
}
根据 Peter Duniho 关于使用动态代码的建议,代码已减少且没有任何错误。任何 window 都可以通过
使用代码 private void KeyHandler_F(object sender, KeyEventArgs e)
{
fullScreen.adjustScreen switchScreen = new fullScreen.adjustScreen();
switchScreen.KeyHandler_F(sender, e, this);
}
并且 class 缩减为:
public class fullScreen
{
public class adjustScreen
{
public void KeyHandler_F(object sender, KeyEventArgs e, dynamic KVV)
{
if (e.Key == Key.F)
{
ToggleWindow(KVV);
}
}
private void ToggleWindow(dynamic KVV)
{
switch (KVV.WindowState)
{
case (WindowState.Maximized):
{
KVV.WindowState = WindowState.Normal;
KVV.WindowStyle = WindowStyle.ToolWindow;
}
break;
default:
{
KVV.WindowState = WindowState.Maximized;
KVV.WindowStyle = WindowStyle.None;
}
break;
}
}
}
}