私はUserControlクラスに基づいてカスタムWPFコントロールを作成しています。それは、単純なチェックボックスです。四角形の2つの線は、コントロール全体を拡大/縮小すると正しく拡大/縮小されます。私はCustomControlクラスにDependencyProperty IsChecked
を追加WPF UserControlをデザイン時に更新する方法
<UserControl x:Name="Container"
x:Class="MyProject.Controls.VirmanCheckbox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyProject.Controls"
mc:Ignorable="d"
d:DesignHeight="50" d:DesignWidth="50" BorderThickness="1" BorderBrush="Black" Width="50" Height="50" Cursor="Hand" IsTabStop="True" Focusable="True" KeyUp="Grid_KeyUp" GotFocus="Container_GotFocus" LostFocus="Container_LostFocus">
<Grid MouseUp="Grid_MouseUp" Background="#00000000">
<Line x:Name="diagonal1" X1="0" Y1="0" X2="{Binding Width, ElementName=Container}" Y2="{Binding Height, ElementName=Container}" Stroke="{Binding ElementName=Container, Path=BorderBrush}" StrokeThickness="{Binding ElementName=Container, Path=BorderThickness}" Visibility="Hidden"/>
<Line x:Name="diagonal2" X1="0" Y1="{Binding Height, ElementName=Container}" X2="{Binding Width, ElementName=Container}" Y2="0" Stroke="{Binding ElementName=Container, Path=BorderBrush}" StrokeThickness="{Binding ElementName=Container, Path=BorderThickness}" Visibility="Hidden"/>
</Grid>
:ここではXAMLです。 IsChecked
がtrue
の場合、対角線が表示されます。 IsChecked
がfalse
の場合、対角線を非表示にする必要があります。
public partial class CustomCheckbox : UserControl
{
public static readonly DependencyProperty IsCheckedProperty;
static CustomCheckbox()
{
IsCheckedProperty = DependencyProperty.Register(
name: "IsChecked",
propertyType: typeof(Boolean),
ownerType: typeof(VirmanCheckbox),
typeMetadata: new FrameworkPropertyMetadata(
defaultValue: false,
flags: FrameworkPropertyMetadataOptions.AffectsRender
)
);
}
public bool IsChecked
{
get { return (bool)GetValue(IsCheckedProperty); }
set
{
var old = (bool)GetValue(IsCheckedProperty);
SetValue(IsCheckedProperty, value);
if (old != value)
{
if (value)
{
diagonal1.Visibility = Visibility.Visible;
diagonal2.Visibility = Visibility.Visible;
}
else
{
diagonal1.Visibility = Visibility.Hidden;
diagonal2.Visibility = Visibility.Hidden;
}
}
}
}
}
私は私のプロジェクトでこのコントロールを使用する場合、私は、このXAMLを得る:それはこのようになります実行時に
<Controls:CustomCheckbox HorizontalAlignment="Left" VerticalAlignment="Top"/>
それは完璧に動作しますが、設計時に私は、XAML私にIsChecked
プロパティを変更した場合CustomCheckboxはグラフィカルに更新されません。私はtrue
にIsChecked
を設定した場合、斜めの線が表示されません。
<Controls:CustomCheckbox HorizontalAlignment="Left" VerticalAlignment="Top" IsChecked="True"/>
<Controls:CustomCheckbox HorizontalAlignment="Left" VerticalAlignment="Top" IsChecked="False"/>
これら2つのコントロールは、設計時に視覚的に同じです。私は何が欠けていますか?
あなたは新しいコンポーネントを作成すべきではなく、CheckBoxインスタンスのカスタムテンプレートを定義するべきだと言いたいのですか?私はまだWPFの新機能ですが、これを実行するグローバルな方法が存在すると思いますか? – Djuka