我試圖從http://msdn.microsoft.com/en-us/magazine/dd882520.aspx中修改WPF工具包的日曆的soltuion,但我在使用usercontrol工作時遇到綁定問題。我試過使用FindAncestor和ElementName,但我只是遇到了一個綁定錯誤。綁定到UserControl的DependencyProperty
我認爲它可能有一些做的提示,它的DataContext的日曆。有沒有其他人有這個問題?
<UserControl x:Class="ChickenPing.MealCalendar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:conv="clr-namespace:ChickenPing.Converters"
xmlns:wpf="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
xmlns:vsm="clr-namespace:System.Windows;assembly=WPFToolkit"
xmlns:loc="clr-namespace:ChickenPing"
x:Name="root">
<wpf:Calendar x:Name="calendar">
<wpf:Calendar.Resources>
<conv:IconConverter x:Key="IconConverter"/>
<conv:MealCalendarConverter x:Key="MealCalendarConverter" />
<!--LinearGradientBrush x:Key="MealBackgroundFill" StartPoint="0,0" EndPoint="0,1">
<GradientStop Color=""
</LinearGradientBrush-->
</wpf:Calendar.Resources>
<wpf:Calendar.CalendarDayButtonStyle>
<Style TargetType="primitives:CalendarDayButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="primitives:CalendarDayButton">
<Grid>
<!Grid.ToolTip>
<ToolTip>
<ToolTip.DataContext>
<MultiBinding Converter="{StaticResource MealCalendarConverter}">
<Binding Path="PlacementTarget.DataContext" RelativeSource="{x:Static RelativeSource.Self}"/>
<Binding Path="Meals">
<Binding.RelativeSource>
<RelativeSource Mode="FindAncestor" AncestorType="{x:Type loc:MealCalendar}" />
</Binding.RelativeSource>
</Binding>
</MultiBinding>
</ToolTip.DataContext>
的錯誤是:
System.Windows.Data Warning: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='MyAssembly.MyControl', AncestorLevel='1''. BindingExpression:Path=ConversionCollection; DataItem=null; target element is 'ToolTip' (Name=''); target property is 'DataContext' (type 'Object')
而爲的DependencyProperty聲明:
public static readonly DependencyProperty MealsProperty = DependencyProperty.Register("Meals", typeof(Dictionary<DateTime, IEnumerable<PlannedMealGroup>>), typeof(MealCalendar), new UIPropertyMetadata(new Dictionary<DateTime, IEnumerable<PlannedMealGroup>>()));
public Dictionary<DateTime, IEnumerable<PlannedMealGroup>> Meals {
get { return base.GetValue(MealsProperty) as Dictionary<DateTime, IEnumerable<PlannedMealGroup>>; }
set {
base.SetValue(MealsProperty, value);
}
}
還有另外一個控制我在同樣的事情發生,所以我想我可能會丟失一些東西。
我已經更新了我的答案以迴應您的編輯。 – 2009-10-20 17:29:44