首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DatagridCell风格被TextBox风格所取代

问DatagridCell风格被TextBox风格所取代
EN

Stack Overflow用户
提问于 2013-02-21 16:24:44
回答 1查看 3.4K关注 0票数 1

我有一个用于Style的DataGridCell (只有触发器很重要)。

代码语言:javascript
复制
<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Foreground" Value="{StaticResource ForegroundBrush}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border Background="Transparent" BorderBrush="{TemplateBinding BorderBrush}"   BorderThickness="0"  SnapsToDevicePixels="True" >
                    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Margin="4, 0, 0, 0"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Foreground" Value="{StaticResource DarkForegroundBrush}" />
        </Trigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
        </Trigger>
    </Style.Triggers>
</Style>

当我像这样定义列时,它是有效的:

代码语言:javascript
复制
<DataGridTemplateColumn Header="Column1" Width="Auto" IsReadOnly="True">
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding Property1, Mode=OneWay}" />
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

但是,当我有TextBox而不是TextBlock这样的时候:

代码语言:javascript
复制
<DataGridTemplateColumn Width="Auto" Header="Column1">
     <DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
                 <TextBox Text="{Binding Path=Property1, Mode=OneWay}" IsReadOnly="True" TextWrapping="Wrap" />
           </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

因为TextBox有自己的Style,所以它不起作用。我需要使用TextBox,因为我想让用户从单元格中选择文本。但是,当选择Foreground单元格/行时,我还需要更改颜色。

(背景颜色是暗的,前景颜色是光的,但是当选择一个单元格/行时,背景颜色是浅的,前景色应该是暗的)

编辑

我把我的问题编辑得更清楚了。抱歉之前的误解。我的目标是在DataGridCell中使用DataGridCell,并使用DataGridCellStyle中的Triggers。

任何帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-21 14:23:14

它不会离开/采用Textblock/Textbox样式。你在里面放了一个文本框,一个文本框有一个背景。

尝试将TextBox背景设置为透明。如果您只想从单元格中选择文本,我还建议删除文本框边框。

可以设置下列属性以获得所需的外观。

Background="Transparent" BorderThickness="0" IsReadOnly="True"

设置TextBox上的前景

代码语言:javascript
复制
<DataTemplate>
    <TextBox Name="Display" Text=.../>
    <DataTemplate.Triggers>

        <DataTrigger Binding="{Binding
                     RelativeSource={RelativeSource
                     Mode=FindAncestor,AncestorType={x:Type DataGridCell}},Path=IsSelected}" Value="true">
            <Setter TargetName="Display" Property="Foreground">
                <Setter.Value>
                    <SolidColorBrush Color="{StaticResource DarkForegroundBrush}"/>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </DataTemplate.Triggers/>
</DataTemplate>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15007273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档