1

我是 WPF 的新手,我正在创建一个用户控件,如下所示:

<UserControl x:Class="WpfApplication3.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" 
         x:Name="MyUserControl2"
         d:DesignHeight="300" d:DesignWidth="300" Background="Coral">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition Height="20"/>
        <RowDefinition Height="20"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Button Content="a" Grid.Row="0"/>
    <Button Content="b" Grid.Row="1"/>
    <Button Content="c" Grid.Row="2"/>
    <ContentPresenter Grid.Row="3"/>
</Grid>

当橙色区域是内容预设器时,这会产生以下布局:

橙色区域是内容展示者

在使用用户控件的主窗口中,我想将控件注入内容预设器

<Window x:Class="WpfApplication3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication3"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <local:MyUserControl>
        <local:MyUserControl.Content>
            <Button Content="d"/>
        </local:MyUserControl.Content>
    </local:MyUserControl>
</Grid>

我希望得到以下布局:

在此处输入图像描述

但相反,整个用户控件被按钮 d 重叠。

我该如何做到这一点?

4

2 回答 2

1

尝试将button自己置于Main Window-

<Grid>
    <local:MyUserControl/>
    <Button Content="d"/>
</Grid>

或者

<Grid>
    <Grid.Resources>
       <DataTemplate x:Key="MyContent">
          <Button Content="d"/>
       </DataTemplate>
    </Grid.Resources>
    <local:MyUserControl/>
</Grid>

在您的用户控制中 -

 <ContentPresenter Grid.Row="3" ContentTemplate="{DynamicResource MyContent}"/>
于 2013-08-04T09:21:07.837 回答
0

我很确定那是行不通的。当您将 MyControl 的内容设置为按钮时,您是在说用户控件的全部内容应该是按钮。我认为您需要在用户控件上有一个属性,然后将 contentpresenter 绑定到该属性。

所以像 MyUserControl.SubContent {get; set;} 然后你可以将 ContentPresenter 绑定到那个。

于 2013-08-04T09:20:51.680 回答