- Visual Studio Community Edition 2015
- .Net 4,0
Ich habe this answer umgesetzt, meine eigene CheckBox
Klasse produzieren komplett mit einem IsChecked
DependencyProperty
. Diese Eigenschaft wird durch die IsChecked
Eigenschaft auf dem WPF CheckBox
unterstützt, oder wäre, wenn es funktionieren würde. Arbeiten würde bedeuten, dass mein Getter und Setter aufgerufen werden, wenn das Kontrollkästchen umgeschaltet wird.
Wenn ich meine Eigenschaft in IsChecked_temp
umbenenne und das XAML so modifiziere, dass es passt, funktioniert es gut. Ich denke, das ist ein Namenskonflikt, aber warum löst ElementName
es nicht? Mein minimaler Testfall folgt.
EDIT 0: Ich habe vergessen zu erwähnen, ich bekomme keine Fehler oder Warnungen.
EDIT 1: This answer wurde zunächst akzeptiert, weil es für den Testfall funktioniert, aber es ist anscheinend nicht die gesamte Antwort. Anwendung auf mein Projekt (und Umbenennung der CheckBox
Klasse ToggleBox
) ergibt eine XamlParseException
bei jeder Nutzung der Immobilie:
A ‚Bindung‘ kann auf der ‚IsChecked‘ Eigenschaft des Typs ‚ToggleBox‘ nicht eingestellt werden. Eine 'Bindung' kann nur für eine DependencyProperty eines DependencyObject festgelegt werden.
Ich werde versuchen, einen minimalen Testfall zu bekommen, um dies zu zeigen.
CheckBox.xaml
<UserControl x:Class="CheckBox_test.CheckBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Self">
<StackPanel>
<CheckBox IsChecked="{Binding IsChecked, ElementName=Self}" />
</StackPanel>
</UserControl>
CheckBox.xaml.cs
using System.Windows;
using System.Windows.Controls;
namespace CheckBox_test
{
public partial class CheckBox : UserControl
{
public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register(
"IsChecked",
typeof(bool),
typeof(CheckBox),
new FrameworkPropertyMetadata(false,
FrameworkPropertyMetadataOptions.AffectsRender));
public bool IsChecked
{
get { return (bool)GetValue(IsCheckedProperty); }
set { SetValue(IsCheckedProperty, value); }
}
public CheckBox()
{
InitializeComponent();
}
}
}
MainWindow.xaml
<Window x:Class="CheckBox_test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CheckBox_test">
<Grid>
<local:CheckBox />
</Grid>
</Window>
MainWindow.xaml.cs (auf Vollständigkeit)
using System.Windows;
namespace CheckBox_test
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
Just for Test, versuchen IsChecked = "{Binding Path = IsChecked, Elementname = Selbst}" – Spawn
@Spawn zu schreiben Ich habe das mit und ohne '_temp' probiert und die gleichen Ergebnisse erhalten. Einen Versuch wert, aber danke. – Grault
Ok, ich werde es morgen versuchen ... Selbst ist kein so seltener Name für UserControl, also muss es funktionieren. Können Sie sagen, welche Visual Studio- und .NET-Version Sie verwenden? – Spawn