Приложение:
Здравствуйте, я динамически добавляю пользовательские элементы управления в приложение WPF.Элемент управления представляет собой пользовательский слайдер.Я создал ControlTemplate в файле XAML, который я хочу использовать в качестве шаблона для этих динамически создаваемых элементов управления.В настоящее время я применяю шаблон с помощью:
newControl.Template = (ControlTemplate)parent.Resources["nameOfTheControlTemplate"];
В настоящее время это работает нормально (т.е. компилирует, запускает и применяет шаблон).
Шаблон выглядит следующим образом: (Извините за стенутекста)
<ControlTemplate x:Key="errorRangeSliderRight" TargetType="{x:Type Slider}">
<Border SnapsToDevicePixels="true" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Track x:Name="PART_Track" Grid.Row="1">
<Track.Thumb>
<Thumb x:Name="Thumb" HorizontalContentAlignment="Right" Width="7">
<Thumb.Template>
<ControlTemplate TargetType="Thumb">
<Path x:Name="nameOfPath" Stroke="Black" StrokeThickness="0" Fill="Red">
<Path.Data>
<GeometryGroup FillRule="NonZero">
<PathGeometry>
<PathGeometry.Figures>
<PathFigure IsClosed="True" StartPoint="7,150">
<PathFigure.Segments>
<PathSegmentCollection>
<LineSegment Point="5,150" />
<LineSegment Point="5,0" />
<LineSegment Point="7,0" />
</PathSegmentCollection>
</PathFigure.Segments>
</PathFigure>
<PathFigure IsClosed="True" StartPoint="0,75">
<PathFigure.Segments>
<PathSegmentCollection>
<LineSegment Point="7,70" />
<LineSegment Point="7,80" />
<LineSegment Point="0,75" />
</PathSegmentCollection>
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</GeometryGroup>
</Path.Data>
</Path>
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Track.Thumb>
</Track>
</Grid>
</Border>
</ControlTemplate>
Причина:
Причина, по которой я решил определить шаблон элемента управления в XAML, а не динамически создавать шаблон с использованием миллионов строккод, использующий FrameworkElementFactory, заключается в том, что он проще, чище и проще в обслуживании / чтении.
Что я хочу:
Я хотел бы внести небольшие изменения в этот элемент управленияшаблон (только цвет заливки объекта Path) в шаблоне ControlTemplate.Если это возможно, я хотел бы получить ссылку на объект ControlTemplate.
Что я пробовал:
Я пытался вызвать FindName ("nameOfPath")в шаблоне он возвращает нулевой объект.
Object o = newControl.Template.FindName("nameOfPath",newControl);
Я попытался создать ContentTemlpate, используя множество экземпляров FrameworkElementFactory и построив таким образом ControlTemplate, это не удалось (объект ControlTemplate довольно сложный и имеет многодочерние элементы).