У меня есть пользовательский элемент управления, с помощью этого кода позади:Как реализовать пользовательский контроль WPF с помощью свойств зависимостей UIElement?
/// <summary>
/// The text to use for the header.
/// </summary>
public UIElement HeaderText
{
get { return (UIElement) GetValue(HeaderTextProperty); }
set { SetValue(HeaderTextProperty, value); }
}
public static DependencyProperty HeaderTextProperty =
DependencyProperty.Register("HeaderText",
typeof(UIElement),
typeof(Panel),
new PropertyMetadata(null, new PropertyChangedCallback(HeaderTextPropertyChanged)));
private static void HeaderTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = d as Panel;
if (control != null)
{
control.HeaderText = (UIElement) e.NewValue;
}
}
И этот XAML:
<TextBlock Text="{TemplateBinding local:CustomPanel.HeaderText}" />
И я пытаюсь использовать пользовательский элемент управления, как это:
<controls:CustomPanel>
<controls:CustomPanel.HeaderText>
<TextBlock Text="Foo " />
<TextBlock Text="{Binding Bar}" />
<TextBlock Text=" baz." />
</controls:CustomPanel.HeaderText>
</controls:CustomPanel>
Однако я получаю пустой/пустой текст.
я могу заставить его работать, если я изменю UIElement
в string
в код-сзади, но я хочу принять как string
, TextBlock
и практически любой UIElement
, что имеет смысл для текста.
Как я могу это достичь?
Это свойство изменило обратный вызов, оказалось бесполезным. –
@ H.B. что вы имеете в виду? – Tower
Он ничего не делает. –