С использованием:
- Visual Studio Community Edition 2015
- .Net 4.0
Я реализовал этот ответ, создав свой собственный CheckBox
класс с IsChecked
DependencyProperty
. Это свойство поддерживается свойством IsChecked
в WPF CheckBox
или будет, если оно будет работать. Работа будет означать, что мои методы получения и установки вызываются при переключении флажка.
Если я переименую свое свойство в IsChecked_temp
и изменю XAML для соответствия, он будет работать нормально. Я думаю, что это конфликт имен, но почему ElementName
его не разрешает? Далее следует мой минимальный тестовый пример.
РЕДАКТИРОВАТЬ 0: я забыл упомянуть, у меня нет ошибок или предупреждений.
РЕДАКТИРОВАТЬ 1: Этот ответ был первоначально принят, потому что он работает для тестового примера, но, по-видимому, это не полный ответ. Применение его к моему проекту (и переименование класса CheckBox
в ToggleBox
) дает XamlParseException
при каждом использовании свойства:
«Привязка» не может быть установлена для свойства «IsChecked» типа «ToggleBox». «Привязка» может быть установлена только для DependencyProperty объекта DependencyObject.
Я попытаюсь получить минимальный тестовый пример, чтобы показать это.
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 (для полноты)
using System.Windows;
namespace CheckBox_test
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
_temp
и без него и получил те же результаты. Тем не менее, стоит попробовать, так что спасибо. - person Grault   schedule 30.10.2015UserControl
и настраиваемого элемента управления, которые представляют собой две совершенно разные концепции, предназначенные для разных случаев использования. - person Federico Berasategui   schedule 30.10.2015CustomControl
. Определенно то, что мне нужно было сделать раньше, но завтра я постараюсь немного расширить свои знания в этой области. - person kirotab   schedule 30.10.2015CutomControl
и не понял, почему он существует. Однако это не имеет отношения к вопросу. - person Grault   schedule 30.10.2015