TextBlock 中的 XAML 自定义文本

Posted

技术标签:

【中文标题】TextBlock 中的 XAML 自定义文本【英文标题】:XAML custom text in TextBlock 【发布时间】:2020-09-02 18:17:03 【问题描述】:

下午好,

我将双精度列表 (Latlng) 绑定到 ItemsControlTextBlock 我想在绑定的列表计数为 0 时创建自定义文本。使用代码我有当ItemsControlItemsSource 是该列表时,TextBlock 为空。

我做错了什么?

顺便说一句,Latlng 列表是一个类的属性。

<ItemsControl Name="icLatLng" ItemsSource="Binding Latlng">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock FontFamily="Arial" FontSize="14">
                <TextBlock.Style>
                    <Style>
                    <Setter Property="TextBlock.Text" Value="Binding"></Setter>
                        <Style.Triggers>
                            <DataTrigger Binding="Binding RelativeSource=RelativeSource AncestorType=ItemsControl, Path=Items.Count" Value="0">
                                <Setter Property="TextBlock.Text" Value="—"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

提前致谢。

【问题讨论】:

【参考方案1】:

欢迎来到 SO。

ItemsControl.ItemTemplate 是应用于控件绑定到的 Items 列表中每个元素的模板。如果没有项目开始,则不会创建,因此您在其中所做的任何事情都不会被看到。

我怀疑您真正想做的是在列表为空时替换整个控件的外观。如果是这样,您可以使用 HasItems 属性上的 DataTrigger 将新模板应用于 ItemsControl 本身:

<ItemsControl Name="icLatLng" ItemsSource="Binding Latlng">
    <ItemsControl.Style>
        <Style TargetType="x:Type ItemsControl" BasedOn="StaticResource x:Type ItemsControl">
            <Style.Triggers>
                <DataTrigger Binding="Binding HasItems, RelativeSource=RelativeSource Self" Value="False">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="x:Type ItemsControl">
                                <TextBlock Text="-" />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ItemsControl.Style>
</ItemsControl>

【讨论】:

以上是关于TextBlock 中的 XAML 自定义文本的主要内容,如果未能解决你的问题,请参考以下文章

在TextBlock WPF / Xaml中展开/缩小符号

网格列中的 XAML 拉伸文本块

TextBlock 与 TextBox 填充 - XAML WPF

控件(文本类): TextBlock

访问 GridView 中的 TextBox 文本 (C# / XAML)

以编程方式从 Windows Phone 8.1 XAML 中的 ListView 中的特定 ListViewItem 到达 TextBlock