XAML-如何将<tabcontrol>的高度设置为固定值?

时间:2016-05-18 11:30:43

标签: c# wpf xaml layout presentation

我有以下XAML标记,我用它来显示我的C#应用​​程序的GUI:

<Grid x:Name="templateRoot" ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="ColumnDefinition0"/>
        <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition x:Name="RowDefinition0" Height="Auto"/>
        <RowDefinition x:Name="RowDefinition2" Height="0.05*"/>
        <RowDefinition x:Name="RowDefinition1" Height="*"/>
    </Grid.RowDefinitions>
    <TabPanel x:Name="headerPanel" Background="White" Grid.Column="0" IsItemsHost="true" Margin="2,2,2,0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1" VerticalAlignment="Top"/>
    <StackPanel Grid.Row="1" Orientation="Horizontal" FlowDirection="RightToLeft">
    </StackPanel>
    <StackPanel Grid.Row="1" Orientation="Horizontal" FlowDirection="LeftToRight" Height="30" VerticalAlignment="Top">
        <Button Style="{DynamicResource NoChromeButton}" Click="backBtn_Click" Margin="0,0,0,0" HorizontalAlignment="Left" >
            <Image Source="C:\...\arrow_left.png" Height="30" Width="40" />
        </Button>
        <Button Style="{DynamicResource NoChromeButton}" Click="RefreshBtn_Click" Margin="0,0,0,0" HorizontalAlignment="Left" >
            <Image Source="C:\...\arrow_loop3.png" Height="30" Width="30" />
        </Button>
        <Button Style="{DynamicResource NoChromeButton}" Click="referThis" Margin="0,0,0,0" HorizontalAlignment="Left" HorizontalContentAlignment="Left" Height="30" Width="80">
            <TextBlock>Refer Patient</TextBlock>
        </Button>
    </StackPanel>
    <Border x:Name="contentPanel" BorderBrush="Green" BorderThickness="5" Background="{TemplateBinding Background}" Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="2" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local">
        <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </Border>
</Grid>

以上标记嵌套在文件顶部的以下结构中:

<Window x:Class.... >
    <Window.Resources>
        <Style ...>
            ...
            <Setter Property="Template">
                <Setter.value>
                    <ControlTemplate TargetType="{x:Type TabControl}">
                        <!--(Above markup goes here) -->

稍后在文件中,我有以下标记:

                    </ControlTemplate>
                </Setter.value>
            </Setter>
        </Style>
        ...
    </Window.Resources>
    <Grid Name = "grid">
        <Image x:Name="Connected" Source="...\abc.png" Height="50" Width="50" Margin="750, 0, -5, 640"></Image>
        <!-- A few more image tags here -->
        <TabControl ... >
            <!-- XML for each of the tab items & their content here -->
        </TabControl>
    </Grid>
</Window>

此XAML显示以下GUI:

App window before resizing

从图像中可以看出,页面的“主要内容”与<StackPanel>重叠,我在其中添加了导航按钮以及我的应用程序的其他功能(返回,刷新等)。

我可以通过拖动其中一个角来调整窗口大小,然后进行调整,以便正确显示按钮和其他功能:

Intended Layout of menu bar

但是,也可以过多地调整窗口大小(即使其太大),这会导致在这些按钮和事物之间显示太多的空白区域,并且还会使最右侧的图像变为移动到与我原定的位置不同的位置:

Overextended menu bar

我的应用程序窗口最右侧的图像是XAML标记在我复制到我的问题中的第三位代码中显示的图像。

所以,我的问题是 - 有没有办法可以“修复”<StackPanel><Grid><Style><TabPanel>标题的大小我正在显示导航按钮和其他图像,以便当用户拖动窗口的一个角落时,它们不会与窗口的其余部分一起调整大小?

我尝试将Height的{​​{1}}属性设置为特定值(例如50),但这导致<TabControl>的整个内容缩小到50 ...即然后窗口的所有内容都显示在窗口上只有50像素高的区域......

基本上,我希望无论用户如何与应用程序交互,我在此处显示的内容都保持不变,并且只有当用户与应用程序交互时,才会动态更新此处显示的内容。有人有什么建议吗?

1 个答案:

答案 0 :(得分:1)

尝试将第1行的高度从0.05 *设置为自动!这应解决重叠问题。