J'ai un contrôle personnalisé contenant un chemin qui a une info-bulle sur gabarit. Je veux être en mesure d'obtenir une référence à une grille dans le modèle lors de l'exécution afin que je puisse modifier ses enfants en fonction de l'utilisation.Comment modifier le modèle Silverlight lors de l'exécution?
Je pensais pouvoir utiliser GetTemplateChild pour obtenir une référence à la grille dans le modèle à partir de la méthode OnApplyTemplate du contrôle, mais cette méthode ne se déclenche pas.
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
_tooltipDetails = (Grid)GetTemplateChild("TooltipDetailsGrid");
}
Sinon, comment pourrais-je être en mesure de faire cela?
Voici le code XAML du contrôle utilisateur.
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="MiX.AssetManagement.UI.Timeline.Silverlight.TimelineBarRibbonItem"
FontSize="9.333" Foreground="White" mc:Ignorable="d">
<UserControl.Resources>
<ControlTemplate x:Key="ToolTipControlTemplateTimelineView" TargetType="ToolTip">
<StackPanel Orientation="Horizontal" Margin="16,0,0,0">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="OpenStates">
<VisualState x:Name="Closed"/>
<VisualState x:Name="Open"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border CornerRadius="4">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#7F000000" Offset="0"/>
<GradientStop Color="#B2000000" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border x:Name="Info" Height="16" Width="16" BorderThickness="2" CornerRadius="8" HorizontalAlignment="Left" VerticalAlignment="Top">
<Border.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="#7FFFFFFF" Offset="1"/>
</LinearGradientBrush>
</Border.BorderBrush>
<Path Fill="White" Stretch="Fill" Margin="5.229,2.089,5.035,2.82" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" Data="M0.77471197,5.0623446 L2.4198356,5.0623446 L2.4198356,10.18 L0.77471197,10.18 z M0.72914064,3.0891075 L2.4654069,3.0891075 L2.4654069,4.3332038 L0.72914064,4.3332038 z">
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Path.RenderTransform>
</Path>
</Border>
<ContentPresenter d:LayoutOverrides="Width, Height" Margin="20,0,0,0"/>
<Grid Grid.Column="1" x:Name="TooltipDetailsGrid">
<TextBlock Text="Tooltip in a Grid"/>
</Grid>
</Grid>
</Border>
</StackPanel>
</ControlTemplate>
</UserControl.Resources>
<Path x:Name="RibbonItem" Cursor="Hand">
<Path.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF66CC33"/>
<GradientStop Color="#FF339900" Offset="1"/>
</LinearGradientBrush>
</Path.Fill>
<ToolTipService.ToolTip>
<ToolTip x:Name="RibbonItemTooltip" Content="" Foreground="#FFFFFFFF" FontSize="9.333" Placement="Mouse" Template="{StaticResource ToolTipControlTemplateTimelineView}"/>
</ToolTipService.ToolTip>
<Path.Data>
<GeometryGroup x:Name="RibbonItemGeometryGroup">
<RectangleGeometry x:Name="RibbonItemBackground" />
</GeometryGroup>
</Path.Data>
</Path>
</UserControl>
Ce post est une reformulation de http://stackoverflow.com/questions/1497842/overriding-method-of-an-element-within-a-xaml-usercontrol avec le code source ajouté. Basé sur la réponse unique à ce que le OnApplyTemplate ne peut pas tirer car l'élément Path ne peut pas être modélisé. –
Je ne vois pas un contrôle "personnalisé" ici, juste un "usercontrol"? – AnthonyWJones
Merci d'avoir signalé mon abus de terminologie Anthony. Cela ne m'aide pas vraiment à résoudre mon problème. –