【问题标题】:ControlTemplate.Trigger not working on CellValuePresenter (TargetType)ControlTemplate.Trigger 不适用于 CellValuePresenter(TargetType)
【发布时间】:2015-02-04 16:09:45
【问题描述】:

我正在使用 Infragistics 2014.2。我有一个 XamDataGrid,它显示带有动态列的数据,网格按其默认样式格式化,此外,一些列的对齐设置为右(十进制类型列),上面有一些值屏蔽,其余的设置对齐向左。

我想删除 XamDataGrid 的默认 CellValuePresenter 样式并编写一个新样式,其中只有 TextBlock/ContentPresenter 而不是每个单元格的 CellValuePresenter,并且在应用新样式后,单元格的对齐和遮罩应该保持不变。应用这种新样式的原因是我希望将同一网格的副本显示在另一个窗口上,而其中没有数据操作。

您能否查看以下我尝试实现相同的代码(即使其中有很多更改),但它似乎无论如何都不起作用。

    <Style x:Key="PreviewCellValuePresenterStyle" TargetType="{x:Type igDP:CellValuePresenter}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate x:Name="CellValuePresenterControlTemplate" TargetType="{x:Type igDP:CellValuePresenter}">
                    <ContentPresenter x:Name="ContentValuePresenter"
                                     VerticalAlignment="Center"
                                     ContentSource="Value"
                                     Margin="4,3,4,4"/>
                    <ControlTemplate.Triggers>
                        <Trigger Property="HorizontalAlignment" Value="Right">
                            <Setter TargetName="ContentValuePresenter" Property="TextBlock.TextAlignment" Value="Right"></Setter>
                        </Trigger>
                        <Trigger Property="HorizontalContentAlignment" Value="Right">
                            <Setter TargetName="ContentValuePresenter" Property="TextBlock.TextAlignment" Value="Right"></Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

现在,我只是为测试设置对齐属性。在上面的代码中,已经尝试用 TextBlock 代替 ContentPresenter 但触发器永远不会被调用。我不知道我做错了什么。

谁能帮我摆脱困境?

谢谢

【问题讨论】:

    标签: wpf triggers infragistics controltemplate xamdatagrid


    【解决方案1】:
    If your intention of using text block is only for alignment/appearance, then you can just use setters to set these values. 
    
                <Style x:Key="PreviewCellValuePresenterStyle" TargetType="{x:Type igDP:CellValuePresenter}" >
                        <Setter Property="FontWeight" Value="DemiBold"/>
                        <Setter Property="Height" Value="24"/>
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                        <Setter Property="VerticalContentAlignment" Value="Top"/>
                 </Style>
    
    But, If you need some other implementations like value masking, or need text block to be there, 
    
    
     <Style x:Key="PreviewCellValuePresenterStyle" TargetType="{x:Type igDP:CellValuePresenter}">
                                                        <Setter Property="Template">
                                                            <Setter.Value>
                                                                <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
                                                                    <TextBlock HorizontalAlignment="Center" Style="{DynamicResource TextStyle}">
                                                                    </TextBlock>
                                                                </ControlTemplate>
                                                            </Setter.Value>
                                                        </Setter>
                                                    </Style>
    
    
        <Style x:Key="TextStyle" TargetType="{x:Type TextBlock}">
    
                <Setter Property="BorderThickness" Value="1"/>
    
                <Setter Property="HorizontalContentAlignment" Value="Center"/>
                <Setter Property="VerticalContentAlignment" Value="Center"/>
          </Style>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2017-07-21
      • 2015-04-12
      • 2011-12-27
      • 1970-01-01
      相关资源
      最近更新 更多