3

UserControlを作成しました。私はそれをこのコードに含めたいと思います:

<UserControl1 Header="Heading">
    <TextBlock Text="My Content" />
</UserControl1>

それがUserControlです。

<UserControl x:Class="WpfApplication1.UserControl1"
             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" MinHeight="200"
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <Style TargetType="ToggleButton">
            <!-- ... -->
        </Style>        
    </UserControl.Resources>
    <StackPanel>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <TextBlock Text="{Binding Path=Header}" Grid.Column="0" />
            <ToggleButton Name="ToggleButton" IsChecked="True" Grid.Column="2" />
        </Grid>
        <Rectangle Stroke="#c3c3c3" StrokeThickness="1" Height="1" StrokeDashArray="4 4" SnapsToDevicePixels="True" Focusable="False" />
        <!-- Content -->
        <ContentControl>
            <ContentPresenter/>
        </ContentControl>
    </StackPanel>
</UserControl>

今私の問題に:

次のコードと統合すると、

<UserControl1 Header="Heading">
    <TextBlock Text="My Content" />
</UserControl1>

結果としてそれを受け取ります:

ここに画像の説明を入力してください

それは私が望んでいることではありません。

しかし、それをこのコードと統合すると、望ましい結果が得られます。

<UserControls:UserControl1 Header="Heading" />

ここに画像の説明を入力してください

私の最初の方法で何が問題になっていますか?

4

2 に答える 2

6

期待どおりに機能させるには、UserControlを設定する必要がありますTemplate

<UserControl x:Class="UserCtrl.UserControl1"
             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">
    <UserControl.Template>
        <ControlTemplate TargetType="UserControl">
            <StackPanel>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0"
                        Text="{Binding Path=Header,
                               RelativeSource={RelativeSource Mode=FindAncestor,
                                               AncestorType=UserControl}}}" />
                    <ToggleButton Name="ToggleButton" IsChecked="True" Grid.Column="2" />
                </Grid>
                <Rectangle Stroke="#c3c3c3" StrokeThickness="1" Height="1" StrokeDashArray="4 4" SnapsToDevicePixels="True" Focusable="False" />
                <!-- Content -->
                <ContentPresenter/>
            </StackPanel>
        </ControlTemplate>
    </UserControl.Template>
    <!-- Initial Content of the UserControl -->
    <TextBlock Text="Initial Content"/>
</UserControl>
于 2012-07-30T09:45:34.880 に答える
0

最初の方法には何の問題もありません。単に作成しUserControl1TextBlockコンテンツをに設定します。これにより、定義で設定したコンテンツが上書きされます。2番目の方法では、を作成しUserControl1、コンテンツをそのままにします。

于 2012-07-30T09:33:54.217 に答える