设置新行占位符的文本

蒂姆·波尔曼(Tim Pohlmann)

我有一个启用了CanUserAddRows的简单数据网格:

<DataGrid Name="TestCasesDataGrid" Padding="0 0 5 0" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" CanUserSortColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Width="100" Binding="{Binding Name}" />
    </DataGrid.Columns>
</DataGrid>

现在,我想在新行占位符中使用灰色的默认文本“新行...”,当我单击它时(添加新行),该文本将消失。
另一个问题中,我找到了以下设置前景色的方法:

<DataGrid Name="TestCasesDataGrid" Padding="0 0 5 0" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" CanUserSortColumns="False">
    <DataGrid.Resources>
        <Style TargetType="{x:Type DataGridRow}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding}" Value="{x:Static CollectionView.NewItemPlaceholder}">
                    <Setter Property="Foreground" Value="Gray" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Width="100" Binding="{Binding Name}" />
    </DataGrid.Columns>
</DataGrid>

但是我也找不到一种添加文本的方法。

蒂姆·波尔曼(Tim Pohlmann)

这是我找到的解决方案的代码(使用帮助程序方法在可视化树中找到子级):

public static DependencyObject FindChild(DependencyObject parent, Func<DependencyObject, bool> predicate)
{
    if (parent == null) return null;

    int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < childrenCount; i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);

        if (predicate(child))
        {
            return child;
        }
        else
        {
            var foundChild = FindChild(child, predicate);
            if (foundChild != null)
                return foundChild;
        }
    }

    return null;
}

在DataGrid变为可见并完全加载后,进行以下调用:

var dataGridRow = Tools.FindChild(testCasesDataGrid, x =>
{
    var element = x as DataGridRow;
    if (element != null && element.Item == System.Windows.Data.CollectionView.NewItemPlaceholder)
        return true;
    else
        return false;
}) as DataGridRow;
var textBlock = Tools.FindChild(dataGridRow, x =>
{
    return x is TextBlock;
}) as TextBlock;
textBlock.Text = "new row...";
textBlock.Foreground = System.Windows.Media.Brushes.Gray;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何设置UISearchBar占位符的文本颜色

来自分类Dev

如何设置占位符文本的填充

来自分类Dev

如何设置UISearchBar占位符的文本颜色

来自分类Dev

用新的文本onClick / onFocus更新占位符文本

来自分类Dev

用新的文本onClick / onFocus更新占位符文本

来自分类Dev

没有占位符文本时如何设置属性文本?

来自分类Dev

将占位符添加到UITextField,如何以编程方式快速设置占位符文本?

来自分类Dev

UITextField,在iOS中的文本后设置占位符

来自分类Dev

在reactjs中设置文本输入占位符颜色

来自分类Dev

如何设置占位符文本的颜色和字体样式

来自分类Dev

设置famo.us InputSurface的占位符文本样式?

来自分类Dev

如何为集合字段设置占位符文本

来自分类Dev

占位符文本填充

来自分类Dev

Textarea占位符文本

来自分类Dev

占位符文本填充

来自分类Dev

独立设置占位符

来自分类Dev

Html 表文本条目占位符作为行索引

来自分类Dev

占位符在文本中的样式

来自分类Dev

动态更改占位符文本

来自分类Dev

从数组更改占位符文本

来自分类Dev

占位符文本颜色不变

来自分类Dev

显示/隐藏占位符文本

来自分类Dev

Javascript - 文本后的占位符

来自分类Dev

在Firefox上设置占位符

来自分类Dev

文本对齐:选择中的占位符文本

来自分类Dev

当应设置格式的文本中存在语法相同的非占位符时,如何在python中设置占位符?

来自分类Dev

如何在IE11中设置输入文本颜色而不是占位符颜色

来自分类Dev

如何在Swing中的JTextfield中设置类似占位符的文本

来自分类Dev

是否将VoiceOver设置为忽略UITextField中的占位符文本?