我在SO上看到了几个不同的页面,讨论我追求的内容,但我认为我的情况不同,可以在这里提出一个新问题。所以我有一个没有XAML的基类。
public abstract class AbstractConfigWindow : System.Windows.Window
{
public AbstractConfigWindow()
{
this.WindowState = System.Windows.WindowState.Maximized;
this.WindowStyle = System.Windows.WindowStyle.None;
this.SetResourceReference(System.Windows.Window.BackgroundProperty, "formBackground");
}
private bool locked = false;
public bool Locked
{
get { return locked; }
set { locked = value; }
}
}
我创建了3个UserControls。他们有计算机的背景图像和4个常见按钮(与问题无关,只是细节)。
我有2个扩展AbstractConfigWindow的Windows。一个是景观视图,另一个是肖像。 (不确定这是否是最好的方法,但它适用于我)我将这3个UserControl放在2个子窗口类的每一个中。因为这两个Windows都只是简单的Windows,所以这不是问题。那么现在我有这个基类我想把所有常见的东西(比如Window状态,样式background.eetc等)放在基类中。这将包括3个用户控件(随着此程序变大,将会添加更多这些控件)我首先想到的是以编程方式将新实例添加到Grid
..然后将该网格放在我需要的位置在每个窗口中。我讨厌它有多脆弱。这是两个窗口之一的一个小例子。
<local:AbstractConfigWindow x:Class="UnitLibrary_WPF.ConfigureWindowLandscape"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:UnitLibrary_WPF"
xmlns:b="clr-namespace:UnitLibrary_WPF.Buttons"
xmlns:u="clr-namespace:UnitLibrary_WPF.UnitImagePanels"
xmlns:s="clr-namespace:UnitLibrary_WPF.Storyboards"
Width="800"
Height="480">
<local:AbstractConfigWindow.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</local:AbstractConfigWindow.Resources>
<Viewbox Margin="10">
<DockPanel x:Name="mainView"
Height="480"
Width="800">
<local:uHeader DockPanel.Dock="Top" />
<local:uBrightnessControl DockPanel.Dock="Top" Height="75" />
<local:uOposButtons Margin="0,5,0,0" DockPanel.Dock="Right" />
<Grid Margin="10">
<Viewbox x:Name="u8800viewbox"
Visibility="Hidden">
<u:u8800Image />
</Viewbox>
<Viewbox x:Name="u9000viewbox"
Visibility="Hidden">
<u:u9000Image />
</Viewbox>
<Viewbox x:Name="u7200viewbox"
Visibility="Hidden">
<u:u7200Image>
<u:u7200Image.LayoutTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="90" />
<TranslateTransform />
</TransformGroup>
</u:u7200Image.LayoutTransform>
</u:u7200Image>
</Viewbox>
</Grid>
</DockPanel>
</Viewbox>
</local:AbstractConfigWindow>
在另一个窗口中我不旋转u7200Image(这是我之前提到的3个UserControl之一)。
所以问题是如何将这些3+控件添加到基类中,所以我只需要将它们添加到基类而不是每个子类?
答案 0 :(得分:1)
为什么不在DataTemplate
中创建3个控件:
<DataTemplate DataType="{x:Type ViewModels:YourViewModel}">
<!--Your 3 controls-->
</DataTemplate>
然后在每个窗口中,您只需要添加数据类型的实例和ContentControl
,然后就会神奇地显示3个控件。
<Window.Resources>
<ViewModels:YourViewModel x:Key="InstanceOfYourDataType" />
</Window.Resources>
<ContentControl Content="{Binding Source={StaticResource InstanceOfYourDataType}}" />