It seems like when directly inside ContentControl.ContentTemplate for some reason the e.Source changes from the expected ComboBox/TextBox etc. to the button itself. The sender remains to be ComboBox/TextBox.
Traced it back to:
|
static void OnClearCommand(object sender, ExecutedRoutedEventArgs e) |
|
{ |
|
switch (e.Source) |
|
{ |
|
case DatePicker datePicker: |
|
datePicker.SetCurrentValue(DatePicker.SelectedDateProperty, null); |
|
break; |
|
case TextBox textBox: |
|
textBox.SetCurrentValue(TextBox.TextProperty, null); |
|
break; |
|
case ComboBox comboBox: |
|
comboBox.SetCurrentValue(ComboBox.TextProperty, null); |
|
comboBox.SetCurrentValue(Selector.SelectedItemProperty, null); |
|
break; |
|
case PasswordBox passwordBox: |
|
passwordBox.Password = null; |
|
break; |
|
} |
|
e.Handled = true; |
|
} |
Directly inside ContentControl.ContentTemplate:

Wraped in StackPanel:

The fix might be to just use the sender instead of e.Source?
Does not work:
<ContentControl>
<ContentControl.ContentTemplate>
<DataTemplate>
<TextBox materialDesign:TextFieldAssist.HasClearButton="True"/>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
Works:
<ContentControl>
<ContentControl.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox materialDesign:TextFieldAssist.HasClearButton="True"/>
</StackPanel>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
It seems like when directly inside
ContentControl.ContentTemplatefor some reason thee.Sourcechanges from the expected ComboBox/TextBox etc. to the button itself. Thesenderremains to be ComboBox/TextBox.Traced it back to:
MaterialDesignInXamlToolkit/MaterialDesignThemes.Wpf/Internal/ClearText.cs
Lines 41 to 60 in 4bba83e
Directly inside

ContentControl.ContentTemplate:Wraped in

StackPanel:The fix might be to just use the
senderinstead ofe.Source?Does not work:
Works: