此代码在我的应用程序中变得越来越普遍:
<StackPanel Orientation="Vertical">
<Label Content="_ComboBox Caption"
Target="comboBox"
Margin="0"
Padding="5,5,5,1" />
<ComboBox x:Name="comboBox"
Width="72"
Margin="5,0,5,5"
Padding="5,1,5,5"
SelectedItem="{Binding ComboSelectedItem}"
ItemsSource="{Binding ComboSourceList}" />
</StackPanel>
它为我提供了一个Captioned ComboBox。
我想让我成为一个自定义控件,它是一个ComboBox,用于公开Label的内容,然后设置其他属性。可以像这样使用的东西:
<Controls:CaptionedComboBox x:Name="comboBox"
Width="72"
LabelContent="_ComboBox Caption"
SelectedItem="{Binding ComboSelectedItem}"
ItemsSource="{Binding ComboSourceList}" />
但是,我考虑制作自定义控件,并且需要一些令人生畏的样式。
有没有办法把我上面的东西拿走,最后做这样的事情?
<StackPanel Orientation="Vertical">
<Label Content="{Binding TemplateLabelContent}"
Target="{Binding ControlName}"
Margin="0"
Padding="5,5,5,1" />
<InheritedComboBoxStuff/>
</StackPanel>
我知道这不起作用。但我的观点是,我必须重新设计整个ComboBox的样式,只是为了在它上面添加一个标签,这似乎很愚蠢。
答案 0 :(得分:6)
您可以为该
制作模板 <ControlTemplate x:Key="ComboWithHeader" TargetType="ContentControl">
<StackPanel Orientation="Vertical">
<Label Margin="0"
Content="{Binding ComboBoxHeader}"
DataContext="{TemplateBinding DataContext}"
Padding="5,5,5,1"
Target="comboBox" />
<ComboBox x:Name="comboBox"
Width="72"
Margin="5,0,5,5"
DataContext="{TemplateBinding DataContext}"
ItemsSource="{Binding ComboSourceList}"
Padding="5,1,5,5"
SelectedItem="{Binding ComboSelectedItem}" />
</StackPanel>
</ControlTemplate>
然后,只要您想使用带标题的组合,只需使用
即可<ContentControl Template="{StaticResource ComboWithHeader}" DataContext="{Binding ComboBoxViewModel}" />
答案 1 :(得分:0)
真的很基本但是很简单,你也可以创建一个UserControl,然后将你的控件嵌入你想要的任何地方。 e.g。
<UserControl x:Class="xxx.View.TestResultsGraph"
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" mc:Ignorable="d"
MinHeight="50"
d:DesignHeight="50" d:DesignWidth="300" >
<Canvas Name="canvas" >
<Polygon x:Name="SuccessShape" Fill="#FFF0FFF0" SnapsToDevicePixels="True" />
<Polyline x:Name="SuccessLine" Stroke="Green" StrokeThickness="0.5" SnapsToDevicePixels="True" />
<Polygon x:Name="FailShape" Fill="#FFFFF0F0" SnapsToDevicePixels="True" />
<Polyline x:Name="FailLine" Stroke="Red" StrokeThickness="0.5" SnapsToDevicePixels="True" />
<Polygon x:Name="PendingShape" Fill="#FFFFF0E0" SnapsToDevicePixels="True" />
<Polyline x:Name="PendingLine" Stroke="DarkOrange" StrokeThickness="0.5" SnapsToDevicePixels="True" />
<Line x:Name="xAxis" Stroke="Black" StrokeThickness="0.5" SnapsToDevicePixels="True" />
<Line x:Name="yAxis" Stroke="Black" StrokeThickness="0.5" SnapsToDevicePixels="True" />
</Canvas>