从代码隐藏更改扩展器标头的数据模板



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

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

我还发现这个线程讨论了如何从代码隐藏创建数据模板,但我也无法让它工作。

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

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 元素。

更改扩展器标题文本块中的标题文本

ExpanderHeader.Text = directory.Name;

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

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

最新更新