停靠的控件选项卡无法正确呈现

时间:2013-10-17 16:01:11

标签: wpf tabs

我正在定制包含制表符控件子元素的用户控件。用户控件停靠在主窗口的一侧。我希望标签项根据停靠位置进行定位,例如。左侧停靠的标签项目沿着侧面旋转90度。我通过绑定到附加属性DockPanel.Dock使选项卡正确对齐。问题是,当呈现选项卡时,它们会被选项卡控件中的一行断开。我可以手动设置外部用户控件对象的(DockPanel.Dock)属性,并沿着该方向停靠的选项卡正确绘制,但其他选项卡由一行分隔。

这是TabDockControl XML:

<UserControl x:Class="AnimationMotionCaptureStudio.TabDockControl"
         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" x:Name="Root" DockPanel.Dock="Left">
<Grid>
    <TabControl Height="Auto" HorizontalAlignment="Stretch" Name="tabControl1" VerticalAlignment="Stretch" Width="Auto" TabStripPlacement="{Binding Path=(DockPanel.Dock),ElementName=Root}">
        <TabControl.Resources>

            <Style TargetType="{x:Type TabItem}">
                <Setter Property="Padding" Value="2" />
                <Setter Property="HeaderTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <ContentPresenter Content="{TemplateBinding Content}" />
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <DataTrigger  Binding="{Binding Path=(DockPanel.Dock), ElementName=Root}" Value="Left">
                        <Setter Property="Padding" Value="2" />
                        <Setter Property="HeaderTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <ContentPresenter Content="{TemplateBinding Content}">
                                        <ContentPresenter.LayoutTransform>
                                            <RotateTransform Angle="90" />
                                        </ContentPresenter.LayoutTransform>
                                    </ContentPresenter>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                    <DataTrigger  Binding="{Binding Path=(DockPanel.Dock), ElementName=Root}" Value="Right">
                        <Setter Property="Padding" Value="5" />
                        <Setter Property="HeaderTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <ContentPresenter Content="{TemplateBinding Content}">
                                        <ContentPresenter.LayoutTransform>
                                            <RotateTransform Angle="-90" />
                                        </ContentPresenter.LayoutTransform>
                                    </ContentPresenter>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TabControl.Resources>

        <TabItem Header="{Binding Path=(DockPanel.Dock), ElementName=Root}" Name="tabItem1">
            <Grid>
                <Border BorderBrush="Silver" BorderThickness="1" Height="Auto" HorizontalAlignment="Stretch" Name="border1" VerticalAlignment="Stretch" Width="Auto" />
            </Grid>
        </TabItem>
    </TabControl>
</Grid>

除了VS2010生成的构造函数之外,代码隐藏文件没有添加额外的代码。

控件的MainWindow XML用法:

        <DockPanel Grid.Row="1" Height="Auto" HorizontalAlignment="Stretch" Name="MainDockPanel" VerticalAlignment="Stretch" Width="Auto" >
        <DockPanel.Children>
            <StatusBar Height="23" Name="statusBar1" Width="Auto" DockPanel.Dock="Bottom" Background="#FF00476D" />

            <AMCS:TabDockControl DockPanel.Dock="Left">
            </AMCS:TabDockControl>

            <AMCS:TabDockControl DockPanel.Dock="Right">
            </AMCS:TabDockControl>              

            <AMCS:TabDockControl DockPanel.Dock="Bottom">
            </AMCS:TabDockControl>
            <Border BorderBrush="Silver" BorderThickness="2" Height="Auto" Name="border1" Width="Auto" DockPanel.Dock="Top" Background="#FF898888">
                <Image Height="Auto" HorizontalAlignment="Stretch" Name="D3DImage" Stretch="Fill" VerticalAlignment="Stretch" Width="Auto" MouseLeftButtonDown="D3DImage_MouseLeftButtonDown" MouseLeftButtonUp="D3DImage_MouseLeftButtonUp" MouseMove="D3DImage_MouseMove" Grid.RowSpan="1" Grid.Row="1" MouseWheel="D3DImage_MouseWheel">
                    <Image.Source>
                        <i:D3DImage x:Name="D3DImageSource"/>
                    </Image.Source>
                </Image>
            </Border>
        </DockPanel.Children>
    </DockPanel>

非常感谢任何关于如何正确设置以正确呈现标签的建议。

0 个答案:

没有答案