Я создал кнопку, которая, как предполагается, поддерживает перенос слов. Мой XAML код кнопки выглядит следующим образом:Изменение свойства зависимостей от кода не отображается
<Button x:Class="POS.TouchScreen.UI.Elements.TouchButtonWPF"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" Height="23" HorizontalAlignment="Left" Name="buttonGrid" VerticalAlignment="Top" Width="75" BorderBrush="#FF8A97A9" Margin="4"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<TextBlock Name="ButtonTextBlock"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Text="{Binding ButtonText, Mode=TwoWay}"
TextWrapping="Wrap">
</TextBlock>
</Button>
Я реализовал свойство, как показано ниже:
public static readonly DependencyProperty ButtonTextProperty =
DependencyProperty.Register("ButtonText", typeof(string), typeof(TouchButtonWPF), new UIPropertyMetadata("Button",new PropertyChangedCallback(OnButtonTextChanged), new CoerceValueCallback(OnCoerceButtonText)));
private static object OnCoerceButtonText(DependencyObject o, object value)
{
TouchButtonWPF button = o as TouchButtonWPF;
if (button != null)
return button.OnCoerceButtonText((string)value);
else
return value;
}
protected virtual string OnCoerceButtonText(string value)
{
return value;
}
private static void OnButtonTextChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
TouchButtonWPF button = o as TouchButtonWPF;
if (button != null)
button.OnButtonTextChanged((string)e.NewValue, (string) e.OldValue);
}
protected virtual void OnButtonTextChanged(string NewValue, string OldValue)
{
this.ButtonTextBlock.Text = NewValue;
}
public string ButtonText
{
get { return (string)GetValue(ButtonTextProperty); }
set { SetValue(ButtonTextProperty, value); }
}
Вставка экземпляра TouchButtonWPF выглядит следующим образом
<tse:TouchButtonWPF ButtonText="OK" FontSize="16" Height="77" HorizontalAlignment="Left"x:Name="buttonOk" Width="85" />
Это работает отлично, и текст кнопки отображается правильно. Однако, когда я назначаю ButtonText из кода C#, текст не обновляется. Я назначаю переменную, как показано ниже.
touchButton.ButtonText = navButton.Caption;
Может ли кто-нибудь сказать мне, что я делаю неправильно? Обратите внимание, что обработчики событий были реализованы, когда они не работали изначально, не могут понять, нужны ли эти обработчики событий вообще для тех возможностей, которые я пытаюсь достичь?
Посмотрите вперед читать ваши ответы :)
Любые отладочные идеи? Вызывается вызов 'OnButtonTextChanged()'? –
Я скопировал ваш код, и он работает нормально с обработчиками событий и без них, вы уверены, что navButton.Caption использует другой текст, чем исходный текст? :) – dnr3