J'essaie d'adapter une solution pour le calendrier de la boîte à outils WPF de http://msdn.microsoft.com/en-us/magazine/dd882520.aspx mais j'ai des problèmes pour obtenir une liaison sur la commande usercontrol. J'ai essayé d'utiliser FindAncestor et ElementName, mais j'ai juste une erreur de liaison.Liaison à une DependencyProperty d'un UserControl
Je pense que cela peut avoir quelque chose à voir avec l'info-bulle et c'est DataContext dans le calendrier. Quelqu'un d'autre a-t-il eu ce problème?
<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>
L'erreur est:
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')
Et la déclaration du 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);
}
}
Il y a un autre contrôle que j'ai où la même chose, donc je pense que je manquerai quelque chose.
J'ai mis à jour ma réponse en réponse à vos modifications. –