如何为一个内容演示者指定3/4?

时间:2011-09-09 20:01:31

标签: wpf controltemplate

我正在为Tab控件创建一个新模板  我需要在其中安排附加图像等项目。下面给出的样式是有主要标签..和内容......虽然提到内容(内容演示者),我必须指定网格列/行...所以如果我使用行列/行作为“0”,“ 0“..然后我的所有内容都将在左上方区域......

请告诉我如何指定具有3/4区域网格的内容演示者。

enter image description here

 <Style x:Key="OutlookTabControlStyle" TargetType="{x:Type TabControl}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabControl}">
                    <Grid ClipToBounds="true" SnapsToDevicePixels="true"
                      KeyboardNavigation.TabNavigation="Local">
                        <Grid.RowDefinitions>
                            <RowDefinition x:Name="RowDefinition0" Height="Auto"/>
                            <RowDefinition x:Name="RowDefinition1" Height="*"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition x:Name="ColumnDefinition0"/>
                            <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/>
                        </Grid.ColumnDefinitions>
                        <Grid x:Name="ContentPanel" Grid.Column="0" Grid.Row="1">
                            <ContentPresenter SnapsToDevicePixels=
                            "{TemplateBinding SnapsToDevicePixels}" Margin="2,2,2,2"
                            x:Name="PART_SelectedContentHost"
                            ContentSource="SelectedContent"/>                           
                        </Grid>
                        <StackPanel HorizontalAlignment="Stretch" Margin="0,-2,0,0"
                        x:Name="HeaderPanel" VerticalAlignment="Bottom" Width="Auto" 
                        Height="Auto" Grid.Row="1" IsItemsHost="True"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground"
                            Value="{DynamicResource
                            {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我的问题是如何分配剩余部分(主要标签区域除外)作为内容paresenter ...我可以看到Canvas作为一个选项。如果您对此有更多了解,请帮助我。

1 个答案:

答案 0 :(得分:4)

创建一个包含两列的网格:一列宽度为*,另一列宽度为3*。这将使您的第二列成为第一列的3倍,或总大小的3/4

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="3*" />
    </Grid.ColumnsDefinitions>

</Grid>

作为替代方案,您不想使用网格,我通常使用MathConverter,它允许我通过数学公式调整边界值。可以找到MathConverter的代码here

<Grid Canvas.Left="{Binding ElementName=ParentPanel, Path=ActualWidth,
      Converter={StaticResource MyMathConverter}, 
      ConverterParameter=@VALUE*.75}" />