2
我正在爲我的WPF應用程序創建一個新控件。其中,我添加了兩個依賴屬性。這些是給一個帶有子彈裝飾器的列表框的樣式。創建自定義WPF控件並將DataTemplate設置爲依賴項屬性
以下是我有:
public class QuestionControl : Control
{
static QuestionControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(QuestionControl), new FrameworkPropertyMetadata(typeof(QuestionControl)));
}
// Another dependency properties...
// PossibleAnswers : IEnumerable
public IEnumerable PossibleAnswers
{
get { return (IEnumerable)base.GetValue(PossibleAnswersProperty); }
set { base.SetValue(PossibleAnswersProperty, value); }
}
public static readonly DependencyProperty PossibleAnswersProperty =
DependencyProperty.Register("PossibleAnswers", typeof(IEnumerable), typeof(QuestionControl));
// PossibleAnswers : DataTemplate
public DataTemplate PossibleAnswersTemplate
{
get { return (DataTemplate)base.GetValue(PossibleAnswersTemplateProperty); }
set { base.SetValue(PossibleAnswersTemplateProperty, value); }
}
public static readonly DependencyProperty PossibleAnswersTemplateProperty =
DependencyProperty.Register("PossibleAnswersTemplate", typeof(DataTemplate), typeof(QuestionControl));
}
然後,我已經得到了通用的風格在這裏。請觀看我將PossibleAnswers設置爲列表框的最後一個樣式,並且綁定是可以的。但是在傳遞數據模板(這個被設置爲名爲ContentText
的內容控件)的地方,並且我已經設置了名爲PossibleAnswersTemplate的模板,並且在這部分中它是錯誤的。
<ContentControl x:Name="ContentText" Margin="2 0 0 0" Content="{Binding}" ContentTemplate="{TemplateBinding PossibleAnswersTemplate}" />
不編譯。應該是什麼錯誤?
<Style TargetType="ListBox" x:Key="KinectRadioList">
<Style.Setters>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Setters>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ControlTemplate.Resources>
<Style TargetType="{x:Type Ellipse}">
<Style.Setters>
<Setter Property="Fill" Value="Black"/>
<Setter Property="Stroke" Value="Black"/>
</Style.Setters>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}, Path=IsEnabled}" Value="False">
<Setter Property="Fill" Value="Black"/>
<Setter Property="Stroke" Value="Black"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ControlTemplate.Resources>
<BulletDecorator Background="Transparent" >
<BulletDecorator.Bullet>
<Canvas Width="15" Height="15">
<Ellipse Width="13" Height="13" Canvas.Left="1" Canvas.Top="1" StrokeThickness="1" Fill="{x:Null}"/>
<Ellipse Width="8" Height="8" Canvas.Left="3.5" Canvas.Top="3.5" Stroke="{x:Null}" Visibility="{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}, Path=IsSelected, Converter={StaticResource BoolToVisibilityConverter}}"/>
</Canvas>
</BulletDecorator.Bullet>
<ContentControl x:Name="ContentText" Margin="2 0 0 0" Content="{Binding}" ContentTemplate="{TemplateBinding PossibleAnswersTemplate}" />
</BulletDecorator>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
<Style TargetType="{x:Type local:QuestionControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:QuestionControl}">
<StackPanel>
<ContentControl Content="{TemplateBinding QuestionText}"
ContentTemplate="{TemplateBinding QuestionTextTemplate}" />
<ListBox ItemsSource="{TemplateBinding PossibleAnswers}" SelectionMode="Multiple"
Style="{StaticResource KinectRadioList}"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
沒有,也沒有工作。輸出拋出我:System.Windows.Data錯誤:4:無法找到與參考'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.UserControl',AncestorLevel ='1'綁定的源。 BindingExpression:路徑= PossibleAnswersTemplate;的DataItem = NULL;目標元素是'ContentControl'(Name ='');目標屬性是'ContentTemplate'(類型'DataTemplate') – 2012-07-24 15:49:25
@DarfZon也許AncestorType是'local:QuestionControl'? – 2012-07-24 15:55:20
我已經更新了答案。 – ethicallogics 2012-07-24 15:55:51