如何将ControlTemplate用于许多网格?

时间:2018-06-08 08:02:16

标签: wpf contentcontrol

我需要为我的网格创建许多ControlTemplates。在编写了controltemplate之后,我需要在另一个网格中使用它,并且有一些条件,例如行数等。在我的情况下,当我调用我的GridTitle <ContentControl Template="{StaticResource GridTitle}"/>时,它运行良好但是当我调用BarsVerticalRight时<ContentControl Template="{StaticResource BarsVerticalRight}"/>没有工作

这是我的代码:

<Window.Resources> 
    <Style x:Key="GridColored" TargetType="Grid">
        <Setter Property="Background" Value="#FF4E5E72"/>
    </Style>

    <LinearGradientBrush x:Key="BackgroundColor" EndPoint="0.5,1.272" StartPoint="0.5,0">
        <GradientStop Color="#FF4E5E72" Offset="1"/>
    </LinearGradientBrush>

    <ControlTemplate x:Key="GridTitle">
        <Grid Grid.Row="0" Style="{StaticResource GridColored}" Grid.IsSharedSizeScope="True">
            <Grid.ColumnDefinitions>
                <ColumnDefinition  Width="60*" SharedSizeGroup="A"/>
                <ColumnDefinition Width="12*" />
                <ColumnDefinition Width="90*" />
                <ColumnDefinition Width="248*" />
                <ColumnDefinition Width="30*" />
            </Grid.ColumnDefinitions>

            <Grid  Grid.Column="0">
                <Image Source="pack://application:,,,/Gate;component/Images/Logo_BlancFondGris.jpg" Stretch="UniformToFill"/>
            </Grid>

            <Viewbox Grid.Column="2" Stretch="Uniform">
                <Grid>
                    <Image Source="pack://application:,,,/Gate;component/Images/Titre.jpg" Stretch="UniformToFill"/>
                </Grid>
            </Viewbox>

            <Grid Grid.Column="3">
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>

                <Viewbox Grid.Row="0" HorizontalAlignment="Right">
                    <TextBlock TextWrapping="Wrap" Foreground="White" FontWeight="Bold" FontStyle="Italic" Text="{Binding CentreName, Mode=OneWay}"  />
                </Viewbox>

                <Grid Grid.Row="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="130*"/>
                        <ColumnDefinition Width="25*"/>
                    </Grid.ColumnDefinitions>

                    <Viewbox Grid.Column="1">
                        <TextBlock TextWrapping="Wrap" Language="fr-FR" Text="{Binding DateTimeLocal, Mode=OneWay,StringFormat='{}{0: dd/MM/yyyy  hh:mm}'}" Foreground="White" HorizontalAlignment="Stretch" >

                        </TextBlock>
                    </Viewbox>    
                </Grid>    
            </Grid>    
        </Grid>
    </ControlTemplate>

    <ControlTemplate x:Key="BarsVerticalLeft">
        <Grid Grid.Column="0" Style="{StaticResource GridColored}" Margin="0,-9,0,0"/>
    </ControlTemplate>

    <ControlTemplate x:Key="BarsVerticalRight">
        <Grid Grid.Column="2" Style="{StaticResource GridColored}" Margin="0,0,0,-10"/>
    </ControlTemplate>
</Window.Resources>

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="80*" />
        <RowDefinition Height="615*" />
        <RowDefinition Height="15*" />
    </Grid.RowDefinitions>
    <ContentControl Template="{StaticResource GridTitle}"/>
    <Grid Margin="0,42,0,10" Grid.RowSpan="3">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="1950*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>

        <ContentControl Template="{StaticResource BarsVerticalLeft}"/>
        <ContentControl Template="{StaticResource BarsVerticalRight}"/>           
    </Grid>
</Grid>

1 个答案:

答案 0 :(得分:0)

除了Grid.Column属性值之外,内容控件BarsVerticalRight和BarsVerticalLeft被正确呈现。由于未使用

指定Grid.Column,因此可能
<ContentControl Template="{StaticResource BarsVerticalLeft}"/> 

默认为0!并且考虑到这将优先于样式属性集,您不能在模板中设置它