سؤال

I'm binding the Expander.Header property in XAML to a backing public property of string type in my ViewModel using the MVVM pattern:

public string EnumName {...}

I'm setting this property to "X_Y_Z" but for some strange reason the Expander Header is removing the first underscore character and it is displayed as XY_Z. I tried adding a "\" before or setting it to @"X_Y_Z" but no luck.

Here my XAML binding portion:

<Expander IsExpanded="true" Header="{Binding EnumName}">

Anybody know why I'm getting this behavior? Is it taking the first "_" as a keyboard shortcut or a meta-character?

Thanks,

هل كانت مفيدة؟

المحلول 3

@H.B. pointed me to the right direction. I ended up setting a Header Template for my Expander as follows, accessing the DataContext of the ancestor ListViewItem:

<Expander.HeaderTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Path=DataContext.EnumName,RelativeSource={RelativeSource AncestorType=ListViewItem}}"/>
    </DataTemplate>
</Expander.HeaderTemplate>

Since I'm now using a TextBlock it does not remove any of the "_" characters in my string.

نصائح أخرى

Probably converted to an access-key because there is a Label or a ContentPresenter with RecognizesAccessKey set to true in your Expander.Template.

You can for example switch out the template or escape underscores in your values (two underscores in a row).

<Expander Header="{Binding Path=Name}">                                    
   <Expander.HeaderTemplate>
      <DataTemplate>
          <TextBlock Text="{Binding}"/>
      </DataTemplate>
   </Expander.HeaderTemplate>
</Expander>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top