我正在使用资源在几个xaml文件中拆分GUI。对于工具栏,我有一个xaml文件(Resources / MainWindowToolbar.xaml):
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Resources="http://cansniff.com/resources">
<ToolBar DataContext="{StaticResource MainWindowViewModel}" x:Key="MainWindowToolbar"
Background="Transparent"
VerticalAlignment="Center"
DockPanel.Dock="Left"
HorizontalAlignment="Left"
Margin="8,0,0,0">
<Grid HorizontalAlignment="Left" Height="32" Margin="10,0,-2,-1" VerticalAlignment="Top" Width="356">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="170*"/>
<ColumnDefinition Width="173*"/>
</Grid.ColumnDefinitions>
<Label Content="Device:" HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="0.521,-0.346"/>
<ComboBox x:Name="cboxDevices" HorizontalAlignment="Left" Margin="53,4,0,0" VerticalAlignment="Top" Width="167" Grid.ColumnSpan="2"/>
<Button x:Name="btnConnect" Content="Connect" HorizontalAlignment="Right" Margin="0,4,0,0" VerticalAlignment="Top" Width="68" Grid.Column="1" Command="{Binding ConnectDeviceCommand}"/>
<Button x:Name="btnRefresh" Content="Refresh" Grid.Column="1" HorizontalAlignment="Left" Margin="49,4,0,0" VerticalAlignment="Top" Width="58" Command="{Binding RefreshDevicesCommand}"/>
</Grid>
</ToolBar>
</ResourceDictionary>
然后在我的窗口(MainWindow.xaml)中我只是合并资源:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/MainWindowMenus.xaml" />
<ResourceDictionary Source="Resources/MainWindowToolbar.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
如何在代码中获取控件实例(MainWindow.xaml.cs)?
答案 0 :(得分:2)
我要回答你的问题,然后我会告诉你为什么它不起作用:P
要获取已声明为资源的对象,请按以下步骤操作:
ToolBar toolBar = FindResource("MainWindowToolbar") as ToolBar;
但是......这可能不适用于你想要做的事情。 Control的实例只能有一个可视父级。在大多数情况下,尝试将该实例重用于多个视图会抛出异常,或导致奇怪的行为。
执行此操作的正确方法是使用UserControls或样式和模板。最简单的方法是在你的ToolBar里面创建一个UserControl,然后将UserControl添加到你希望它拥有它的每个视图中。