1

次のユーザーコントロールがあります。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
<Label Grid.Row="0" Content="USER CONTROL" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" Name="label1" 
       VerticalAlignment="Top" FontSize="26" Padding="0"/>        
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
    <Border BorderBrush="Black" BorderThickness="1">
        <DockPanel x:Name="dPanel" Background="White">            
        </DockPanel>
    </Border>
</ScrollViewer>        
</Grid>

MainWindow.xaml で次の XAML を使用すると:

<local:UserDockPanel>
    <Label ...>
    <Label ...>
</local:UserDockPanel>

子供は一人しか産めないと言っています。

私の最初の質問は: UserControl を使用する必要がありますか、それともカスタム コントロールを使用する必要がありますか? ラベルがあり、DockPanel の上に Border と Scrollviewer がある状況では、UserControl が最適だと思いました。

また、私の理解では、パネルをテンプレート化することはできません。見栄えがしないため、スタイルがありません。

2 番目の質問: UserControl を使用する必要がある場合、ドック パネルに複数の子を追加できるようにするにはどうすればよいですか?

4

1 に答える 1

2

を使用してそれを行うことができItemsControlます。何かをサブクラス化したり、独自に作成したりする必要はありません。

<Window x:Class="WpfApplication4.Window16"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window16" Height="300" Width="300">
    <Window.Resources>
        <Style TargetType="ItemsControl" x:Key="UserDockPanelStyle">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ItemsControl">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <Label Grid.Row="0" Content="USER CONTROL" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" Name="label1" 
                                                VerticalAlignment="Top" FontSize="26" Padding="0"/>
                            <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
                                <Border BorderBrush="Black" BorderThickness="1">
                                    <ItemsPresenter/>
                                </Border>
                            </ScrollViewer>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="ItemsPanel">
                <Setter.Value>
                    <ItemsPanelTemplate>
                        <DockPanel IsItemsHost="True" Background="White"/>
                    </ItemsPanelTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

    <ItemsControl Style="{StaticResource UserDockPanelStyle}">
        <Label DockPanel.Dock="Bottom" Content="Bottom"/>
        <Label DockPanel.Dock="Top" Content="Top"/>
        <Border Background="Blue"/>
    </ItemsControl>
</Window>
于 2013-03-11T16:17:16.643 に答える