era*_*zap 6 wpf custom-controls itemscontrol
我正在尝试创建一个源自的自定义控件ItemsControl.将ItemsControl被初始化的项目,但他们没有显示.
itemsControl:
public class PipeControl : ItemsControl
{
static PipeControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(PipeControl), new FrameworkPropertyMetadata(typeof(PipeControl)));
}
public PipeControl()
{
Checkers = new ObservableCollection<Checker>();
Checkers.Add(new Checker());
Checkers.Add(new Checker());
Checkers.Add(new Checker());
Checkers.Add(new Checker());
Checkers.Add(new Checker());
}
public ObservableCollection<Checker> Checkers
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
主题资源字典:Generic.xaml
<Style TargetType="{x:Type local:PipeControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:PipeControl}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type local:Checker}">
<Ellipse Fill="Red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsSource" Value="{Binding Checkers,RelativeSource={RelativeSource Self}}"/>
<!-- Just a Precaution its the default panel any ways -->
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
任何想法为什么没有显示项目?
Bra*_*ker 13
您需要设置ItemsSource.因此,例如,您可以ItemsSource = Checkers;在最后的Checkers Add行下方添加.即使您尝试将ItemsSource设置为样式中的Checkers,我认为如果您在控件类中设置它会更容易.不过我只差两分钱.
以下是PipeControl类的示例:
public class PipeControl : ItemsControl
{
public ObservableCollection<Checker> Checkers { get; set; }
static PipeControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(PipeControl), new FrameworkPropertyMetadata(typeof(PipeControl)));
}
public PipeControl()
{
Checkers = new ObservableCollection<Checker>();
Checkers.Add(new Checker());
Checkers.Add(new Checker());
Checkers.Add(new Checker());
Checkers.Add(new Checker());
Checkers.Add(new Checker());
ItemsSource = Checkers;
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要ControlTemplate中的ItemsPresenter,并且椭圆需要宽度和高度.这是一个更新的样式:
<Style TargetType="{x:Type local:PipeControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:PipeControl}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ItemsPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type local:Checker}">
<Ellipse Width="25"
Height="25"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Fill="Red" />
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11654 次 |
| 最近记录: |