我正在尝试将代码隐藏中的扩展器添加到现有的列表框中。需要在扩展器标题中显示的内容来自目录名称,该目录名称可能包含也可能不包含下划线。我想保留目录名称,而不是将第一个下划线解释为键盘快捷键。
我发现这个线程讨论了如何在 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=...}"/>