Ich versuche, ein sehr flexibles benutzerdefiniertes Steuerelement zu erstellen. Die Flexibilität, die ich versuche, in der Lage zu erreichen, um UserControl
zum ExpanderContent
Dependency
Eigenschaft, Code-behind-Schnipsel zu binden:So binden Sie UserControl an den Inhalt des benutzerdefinierten Steuerelements
public partial class ChartBar : UserControl
{
public UIElement ExpanderContent
{
get { return (UIElement)GetValue(ExpanderContentProperty); }
set { SetValue(ExpanderContentProperty, value); }
}
// Using a DependencyProperty as the backing store for ExpanderContent. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ExpanderContentProperty =
DependencyProperty.Register("ExpanderContent", typeof(UIElement), typeof(ChartBar), new PropertyMetadata(null, OnExpanderContentChanged));
private static void OnExpanderContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//throw new NotImplementedException();
}
.
.
.
Ich habe versucht, ein ContentPresenter
in der XAML verwenden, aber es funktioniert nicht. Ich kann natürlich mit Tasten füllen und es funktioniert, aber das schlägt den dynamischen Inhalt durch Bindung.
<Expander x:Name="expander" Header="" VerticalAlignment="Top" d:LayoutOverrides="Width" Style="{DynamicResource ExpanderStyle1}">
<ContentPresenter Content="{Binding ExpanderContent, ElementName=TestControlWithContent}" />
<!--<WrapPanel HorizontalAlignment="Center" >
<Button Content="A" Style="{DynamicResource ButtonStyle1}" />
<Button Content="B" Style="{DynamicResource ButtonStyle1}" />
<Button Content="C" Style="{DynamicResource ButtonStyle1}" />
<Button Content="D" Style="{DynamicResource ButtonStyle1}" />
<Button Content="E" Style="{DynamicResource ButtonStyle1}" />
<Button Content="F" Style="{DynamicResource ButtonStyle1}" />
</WrapPanel>-->
</Expander>
Was noch verwirrender ist, das ich tun kann,
// ChartBarParent is the name of the custom control set in XAML
ChartBarParent.Content = new TestControlWithContent();
und es funktioniert sowie den Rückruf ausgelöst.
Letztendlich ist UIElement
in einer Abhängigkeitseigenschaft und mit einem ContentPresenter
der richtige Weg, dies zu tun?
[Wie Inhalt Benutzersteuerung hinzufügen] (http://stackoverflow.com/q/10427133/1997232). – Sinatr
Ich habe diesen Link angeschaut, aber die Lösung bestand darin, typeof (Objekt) zu verwenden, was ich nicht erreichen wollte. Ich wollte UIElement oder FrameworkElement verwenden. Fehle ich etwas (sehr möglich)? – Jason
'ContentPresenter' soll in einer' ControlTemplate' verwendet werden, und Sie füllen seinen Inhalt nicht, indem Sie seine 'Content' -Eigenschaft binden, sondern indem Sie seine' ContentSource' -Eigenschaft auf den Namen einer Eigenschaft auf der Vorlage setzen ('ContentSource 'hat einen Standardwert von' "Content" ', weshalb man oft einen Eintrag ohne Attribute einfügen kann und das magisch was du meinst). Wenn diese bestimmte Verwendung nicht für das gilt, was Sie tun, tun Sie dies, wie @ibebbs vorschlägt, und verwenden Sie stattdessen "ContentControl". –