【问题标题】:WPF - Using Control Template just on one elementWPF - 仅在一个元素上使用控制模板
【发布时间】:2018-12-04 15:25:16
【问题描述】:

我在 WPF 和 C# 中的第一步,但我没有让它工作...... :(

我有一个应用程序,在一个窗口内有两个网格。我必须更改第一个网格的样式,所以我开始阅读并使用 ControlTemplate。 我的网格现在看起来像我想要的那样。但我只希望第一个网格看起来像这样。同一页面上的第二个应该有另一种样式。

是否可以仅在一个网格上绑定控件模板。也许是通过名称或其他识别方式?

我现在在 window.resources 中编写的 ControlTemplate 代码看起来:

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border 
                            Name="Border"
                            Margin="0,0,0,0" 
                            Background="Black"
                            BorderBrush="Black" 
                            BorderThickness="0,2,0,0" 
                            CornerRadius="0,0,0,0" >
                            <ContentPresenter x:Name="ContentSite"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"
                                ContentSource="Header"
                                Margin="0,0,0,20"
                                RecognizesAccessKey="True"/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="BorderBrush" Value="#FF454E54" />
                            <Setter TargetName="Border" Property="Background"   Value="#FF0A3651" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="Border" Property="BorderBrush" Value="White" />
                            <Setter TargetName="Border" Property="Background" Value="#FF454E54" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

【问题讨论】:

    标签: wpf grid controltemplate


    【解决方案1】:

    您可以给StyleControlTemplate 一个x:Key (&lt;Style x:Key="key" TargetType="{x:Type TabItem}"&gt;) 并通过设置元素的StyleTemplate 属性将其应用于您想要的元素,如下所示:

    <TabItem Style="{StaticResource key}">
    

    没有x:KeyStyle 是隐式的,将应用于类型与Style 的指定TargetType 匹配的所有元素。

    【讨论】:

      【解决方案2】:

      不要在 Window.Resources 下编写模板,而是在 Grid.Resources 下编写模板

      【讨论】:

      • 感谢您的回答。不知道这也会起作用。如果我必须再次使用它,我会注意在适当的元素下编写模板是否更好。
      【解决方案3】:

      试试这个。所有这些都是直接设置 TabItem 的样式。

      <TabItem> <!-- This is your TabItem control -->
          <TabItem.Style>
              <Style TargetType="{x:Type TabItem}">
                  <Setter Property="Template">
                      <Setter.Value>
                          <ControlTemplate>
                              <!-- ControlTemplate here -->
                          </Controltemplate
                      </Setter.Value>
                  </Setter>
              </Style>
          </TabItem.Style>
      </TabItem>
      

      【讨论】:

      • 我试过这个。但要获得选定的触发器工作,我必须实现一个控制模板。
      • 是的 - 您应该将整个 &lt;Style&gt; 嵌套在 &lt;TabItem.Style&gt; 中,包括您的 ControlTemplate。我已经编辑了我的答案以使其更清楚。
      • 再次感谢。我会测试一下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多