我不得不问这个问题,但我整个周末都在阅读微软和非Micorosoft的文档,这一切都要么过于简单化,要么涵盖一些与我无关的奇怪的深奥案例。
我需要的是非常简单的。我有一些标记
<Viewbox Grid.Row="1" Margin="55,3,15,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="303*"></ColumnDefinition>
<ColumnDefinition Width="156*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding TextSettings.PlayerNumber}" />
<TextBlock Grid.Column="1" Text="{Binding PlayerNumber}" />
</Grid>
</Viewbox>
出于各种原因,我希望该视图框的内容存在于另一个文件中。它甚至不必可重复使用,它只需要在UserControl中,我可以包含,也可以不包括,或者根据应用程序状态包含不同的用户控件。
我无法弄清楚如何将Grid
移动到自己的UserControl中并让绑定继续工作。我假设我必须通过参数将ViewModel从父视图传递给子节点,但对于我的生活,我找不到正确语法的示例。
因此。如果要将其移动到自己的UserControl,
答案 0 :(得分:3)
您的数据上下文将在可视树下继承。所以只需定义UserControl
<UserControl x:Class="WpfApplication1.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="303*"></ColumnDefinition>
<ColumnDefinition Width="156*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding TextSettings.PlayerNumber}" />
<TextBlock Grid.Column="1" Text="{Binding PlayerNumber}" />
</Grid>
</UserControl>
然后在父窗口中,您需要声明用户控件的命名空间:
xmlns:local="clr-namespace:WpfApplication1"
然后使用它:
<Viewbox Grid.Row="1" Margin="55,3,15,0">
<local:MyUserControl/>
</Viewbox>