从代码隐藏更改扩展器 header 的 DataTemplate

Change DataTemplate for Expander header from Code Behind

我正在尝试从代码隐藏中向现有列表框添加扩展器。扩展器header中需要显示的内容来自目录名,目录名可以带下划线也可以不带。我想保留目录名称,而不是将第一个下划线解释为键盘快捷键。

我在 xaml 中找到了 this 个讨论如何做到这一点的线程,并尝试在代码中实现相同的解决方案,但没有任何运气。

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

我尝试了以下代码片段,但它要么无法编译,要么只为扩展器显示空白 headers:

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;

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

明确地将 TextBlock 添加到 Expander.Header 中,它会保持文本不变。

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

这样您就不需要在 C# 代码中创建 UI 个元素。

更改 header ExpanderHeader 文本块中的文本

ExpanderHeader.Text = directory.Name;

或者如果有视图模型就绑定:

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