RadioButtonのみを含むカスタムコントロールを作成したいとします。WPFでのRadioButtonsのCustomContainerに関する問題
<RadioButtonHolder Orientation="Horizontal">
<RadioButton>RadioButton 1</RadioButton>
<RadioButton>RadioButton 2</RadioButton>
<RadioButton>RadioButton 3</RadioButton>
<RadioButton> ...</RadioButton>
</RadioButtonHolder>
現在、私は部分的にこれを行うカスタムコントロールを作成しました。しかし、それはRadioButtonsの進行中のコレクションを維持するようです。そして、このRadioButtonのコレクションを最後に初期化されたコントロールに追加します。誰がなぜこのことが分かっているのですか?どんな助けでも大歓迎です。
編集: これで何が起こったのかわかりました。オブジェクトが初期化されると、すべてのRadioButtonを含むRadioButtons
のリストが作成され、ウィンドウのすべてのRadioButtonHolder
コントロールに子として添付されます。最後のコントロールはアイテムを表示します。
しかし、私はこれを防止し、各コントロールにのみコンテンツをローカライズする方法がわかりません。
<RadioButtonHolder Name="RBH1">
<RadioButton Name="RB1">RB 1</RadioButton>
<RadioButton Name="RB2">RB 2</RadioButton>
</RadioButtonHolder>
<RadioButtonHolder Name="RBH2">
<RadioButton Name="RB3">RB 3</RadioButton>
<RadioButton Name="RB4">RB 4</RadioButton>
</RadioButtonHolder>
RB1
& RB2
はRBH1
とRB3
& RB4
に表示されますRBH2
に子供のように表示されます。私が書いた場合ようにします。 WPFは、可能な限り使用するように単純なことを意図している
CustomControl.cs
using System.Collections.Generic;
using System.Windows;
using Sytem.Windows.Controls;
using System.Windows.Markup;
namespace RandomControl
{
[ContentProperty("Children")]
public class CustomControl1 : Control
{
public static DependencyProperty ChildrenProperty =
DependencyProperty.Register("Children", typeof(List<RadioButton>),
typeof(CustomControl1),new PropertyMetadata(new List<RadioButton>()));
public List<RadioButton> Children
{
get { return (List<RadioButton>)GetValue(ChildrenProperty); }
set { SetValue(ChildrenProperty, value); }
}
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1),
new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
}
}
Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:RandomControl">
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ItemsControl ItemsSource="{TemplateBinding Children}"
Background="{TemplateBinding Background}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
感謝:
私は、コードを変更しました! :)それはこのようにするのが理にかなっています。 元々、私が所有者にして欲しいのは、ラジオボタンにInkPresenterをオーバーレイして、すばらしいペンのやりとりができるようにすることでした。 – Nilu