Доступ к пользовательскому элементу управления в стиле App.xaml WPF - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь установить свойство «Обводка» Path в моей визуальной кисти (определено в App.xaml) через свойство из моей модели.Я использую этот стиль в своем другом шаблоне элемента управления в пользовательском элементе управления.

Стиль в ресурсах элемента управления пользователя:

<Ellipse x:Name="slideThumb" Height="25" Width="25" Stroke="{Binding ThumbColor, UpdateSourceTrigger=PropertyChanged}">
                        <Ellipse.Style>
                            <Style TargetType="{x:Type Ellipse}">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding IsHatchBrush}" Value="true">
                                        <Setter Property="Fill" Value="{StaticResource HatchBrushVertical}" />
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding IsHatchBrush}" Value="false">
                                        <Setter Property="Fill" Value="{Binding ThumbColor, UpdateSourceTrigger=PropertyChanged}" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Ellipse.Style>
                    </Ellipse>

Кисть, определенная в приложении.xaml:

<VisualBrush x:Key="HatchBrushVertical" TileMode="Tile" Viewport="0,0,2,3" ViewportUnits="Absolute" Viewbox="0,0,5,5" ViewboxUnits="Absolute">
        <VisualBrush.Transform>
            <RotateTransform Angle="45" />
        </VisualBrush.Transform>
        <VisualBrush.Visual>
            <Canvas>
                <Path Data="M 0 0 L 0 10" Stroke="{Binding Path=Stroke, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Ellipse}}}" StrokeThickness="5"/>
            </Canvas>
        </VisualBrush.Visual>
    </VisualBrush>

Проблема здесь в том, что я не могу установить свойство Stroke визуальной кисти в app.xaml через привязку.

Нужна помощь.Заранее спасибо

1 Ответ

0 голосов
/ 23 октября 2018

Возможно, вы можете использовать Brush в качестве OpacityMask.

Сначала создайте (более простую) DrawingBrush вместо VisualBrush:

<DrawingBrush x:Key="HatchBrush" TileMode="Tile"
              Viewport="0,0,3,3" ViewportUnits="Absolute"
              Viewbox="0,0,2,2" ViewboxUnits="Absolute">
    <DrawingBrush.Drawing>
        <GeometryDrawing Geometry="M-1,2 L2,-1 M0,3 L3,0">
            <GeometryDrawing.Pen>
                <Pen Thickness="0.7" Brush="Black"/>
            </GeometryDrawing.Pen>
        </GeometryDrawing>
    </DrawingBrush.Drawing>
</DrawingBrush>

Затем напишите DataTrigger, например:

<DataTrigger Binding="{Binding IsHatchBrush}" Value="True">
    <Setter Property="OpacityMask" Value="{StaticResource HatchBrush}" />
</DataTrigger>
...