【问题标题】:Change DataTemplate for Expander header from Code Behind从后面的代码更改扩展器标头的 DataTemplate
【发布时间】:2019-09-05 13:00:57
【问题描述】:

我正在尝试将扩展器从后面的代码添加到现有的 ListBox。需要在扩展器的标题中显示的内容来自目录名称,该目录名称可能包含也可能不包含下划线。我想保留目录名称并且不将第一个下划线解释为键盘快捷键。

我发现this 线程讨论如何在 xaml 中执行此操作,并尝试在后面的代码中实现相同的解决方案,但没有任何运气。

我还发现 this 线程讨论如何从后面的代码创建数据模板,但我也无法让它工作。

我尝试了以下代码 sn-ps,但它要么无法编译,要么只是为扩展头显示空白:

String markup = String.Empty;
markup = "<TextBlock text=\"" + directory.Name + "\"/>";
ex.HeaderTemplate = new DataTemplate((DataTemplate)XamlReader.Load(markup));

.

ex.HeaderTemplate = new DataTemplate("TextBlock");
TextBlock tb = new TextBlock();
tb.Text = directory.Name;
ex.Header = tb;

【问题讨论】:

标签: c# wpf code-behind


【解决方案1】:

您无需更改 HeaderTemplate 以避免下划线转换为 AccessKey。

将 TextBlock 显式添加到 Expander.Header 中,它将保持文本不变。

<Expander>
    <Expander.Header>
        <TextBlock x:Name="ExpanderHeader"/>
    </Expander.Header>
</Expander>

这样你就不需要在 c# 代码中创建 UI 元素了。

更改 ExpanderHeader textBlock 中的标题文本

ExpanderHeader.Text = directory.Name;

如果有视图模型则绑定:

<TextBlock x:Name="ExpanderHeader" Text="{Binding Path=...}"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多