Ich habe ein benutzerdefiniertes Steuerelement in WPF. In diesem habe ich eine DependencyProperty
des Typs int
. In der Vorlage für das benutzerdefinierte Steuerelement habe ich eine TextBlock
, I und möchte den Wert der Ganzzahl in der TextBlock
zeigen. Aber ich kann es nicht zur Arbeit bringen.WPF: Binding eine ganze Zahl zu einem TextBlock mit TemplateBinding
Ich verwende TemplateBinding
. Wenn ich den gleichen Code verwende, aber den Typ des DependencyProperty
zu string
ändern, funktioniert es gut. Aber ich möchte wirklich, dass es eine ganze Zahl ist, damit der Rest meiner Anwendung funktioniert.
Wie kann ich das tun?
Ich habe einen vereinfachten Code geschrieben, der das Problem zeigt. Zunächst wird die individuelle Steuerung:
public class MyCustomControl : Control
{
static MyCustomControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), new FrameworkPropertyMetadata(typeof(MyCustomControl)));
MyIntegerProperty = DependencyProperty.Register("MyInteger", typeof(int), typeof(MyCustomControl), new FrameworkPropertyMetadata(0));
}
public int MyInteger
{
get
{
return (int)GetValue(MyCustomControl.MyIntegerProperty);
}
set
{
SetValue(MyCustomControl.MyIntegerProperty, value);
}
}
public static readonly DependencyProperty MyIntegerProperty;
}
Und das ist meine Standardvorlage:
<Style TargetType="{x:Type local:MyCustomControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyCustomControl}">
<Border BorderThickness="1" CornerRadius="4" BorderBrush="Black" Background="Azure">
<StackPanel Orientation="Vertical">
<TextBlock Text="{TemplateBinding MyInteger}" HorizontalAlignment="Center" />
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Und Nutzung:
<Window x:Class="CustomControlBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CustomControlBinding"
Title="MainWindow" Height="350" Width="525">
<Grid>
<local:MyCustomControl Width="100" Height="100" MyInteger="456" />
</Grid>
Was mache ich falsch?
Dank // David
regelmäßige Verwendung wie diese Bindung können Sie auch Ihren eigenen Wert Konverter angeben (siehe IValueConverter), die Sie als automatisch Umwandlung Typ Code Ihre eigenes Typkonvertierungsverhalten. – Aardvark
Funktioniert gut! Danke Quartermeister! :) – haagel
@Aardvark: Guter Punkt. Sie können sogar einen Konverter angeben, selbst wenn Sie eine TemplateBinding verwenden. – Quartermeister