簡體   English   中英

從代碼背后更改Expander標頭的DataTemplate

[英]Change DataTemplate for Expander header from Code Behind

我試圖將擴展器從代碼添加到現有的ListBox中。 需要在擴展器標題中顯示的內容來自目錄名稱,該目錄名稱可能包含也可能不包含下划線。 我想保留目錄名稱,但不要將第一個下划線解釋為鍵盤快捷鍵。

我發現線程討論了如何在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 textBlock中更改標題文本

ExpanderHeader.Text = directory.Name;

或綁定它(如果有視圖模型):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM