问题描述
我有一些繁忙的 xaml 表示绕轴的方向。到目前为止,它运行良好,但现在。
<UserControl x:Class="NameSpace.OrientationEditor"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Namespace.SensorOrientationEditor"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:resources="clr-namespace:Namespace.Resources"
xmlns:converters="clr-namespace:Namespace.Converters"
mc:Ignorable="d" Margin="0"
Width="86" Height="86">
<UserControl.Resources>
<local:SensorOrientationorientationdisplayConverter x:Key="SensorOrientationorientationdisplayConverter"/>
<converters:CollectionContainsToBooleanConverter x:Key="CollectionContainsToBooleanConverter"/>
</UserControl.Resources>
<Grid Width="86" Height="86" Name="RootContainer">
<Grid.DataContext>
<local:OrientationEditorviewmodel/>
</Grid.DataContext>
<Canvas Margin="0" >
<Canvas.Resources>
<Style targettype="polygon" x:Key="polygonStyle">
<Setter Property="Fill" Value="{Binding Source={x:Static resources:CompanyColors.Instance},Path=INACTIVE_BACKGROUND_COLOR}" />
<Style.Triggers>
<Trigger Property="IsMouSEOver" Value="True">
<Setter Property="Fill" Value="{Binding Source={x:Static resources:CompanyColors.Instance},Path=PRIMARY_FOREGROUND_COLOR}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style targettype="Ellipse" x:Key="EllipseStyle">
<Setter Property="stroke" Value="{Binding Source={x:Static resources:CompanyColors.Instance},Path=WHITE_FOREGROUND}" />
</Style>
<Style targettype="Ellipse" x:Key="CenterEllipseStyle" >
<Setter Property="Fill" Value="{Binding Source={x:Static resources:CompanyColors.Instance},Path=PRIMARY_FOREGROUND_COLOR}"/>
</Trigger>
</Style.Triggers>
</Style>
</Canvas.Resources>
<!-- Top element-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.Top}" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.Top}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<polygon Points="4,0 8,6 12,24 0,6 4,6" RenderTransformOrigin="0.5,1.75" >
<polygon.Resources>
<Style targettype="polygon" BasedOn="{StaticResource polygonStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedDirections,Converter={StaticResource CollectionContainsToBooleanConverter},ConverterParameter={x:Static local:OrientationEditorDirection.Top}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</polygon.Resources>
<polygon.RenderTransform>
<TransformGroup>
<TranslateTransform X="40" Y="4"/>
</TransformGroup>
</polygon.RenderTransform>
</polygon>
</ControlTemplate>
</Button.Template>
</Button>
<!-- Top-right element-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.TopRight}" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.TopRight}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<polygon Points="4,1.75" >
<polygon.Resources>
<Style targettype="polygon" BasedOn="{StaticResource polygonStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedDirections,ConverterParameter={x:Static local:OrientationEditorDirection.TopRight}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</polygon.Resources>
<polygon.RenderTransform>
<TransformGroup>
<RotateTransform Angle="45"/>
<TranslateTransform X="40" Y="4"/>
</TransformGroup>
</polygon.RenderTransform>
</polygon>
</ControlTemplate>
</Button.Template>
</Button>
<!-- Right element-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.Right}" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.Right}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<polygon Points="4,ConverterParameter={x:Static local:OrientationEditorDirection.Right}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</polygon.Resources>
<polygon.RenderTransform>
<TransformGroup>
<RotateTransform Angle="90"/>
<TranslateTransform X="40" Y="4"/>
</TransformGroup>
</polygon.RenderTransform>
</polygon>
</ControlTemplate>
</Button.Template>
</Button>
<!-- Bottom-Right element-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.Bottomright}" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.Bottomright}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<polygon Points="4,6" RenderTransformOrigin="0.5,ConverterParameter={x:Static local:OrientationEditorDirection.Bottomright}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</polygon.Resources>
<polygon.RenderTransform>
<TransformGroup>
<RotateTransform Angle="135"/>
<TranslateTransform X="40" Y="4"/>
</TransformGroup>
</polygon.RenderTransform>
</polygon>
</ControlTemplate>
</Button.Template>
</Button>
<!-- Bottom element-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.Bottom}" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.Bottom}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<polygon Points="4,ConverterParameter={x:Static local:OrientationEditorDirection.Bottom}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</polygon.Resources>
<polygon.RenderTransform>
<TransformGroup>
<RotateTransform Angle="180"/>
<TranslateTransform X="40" Y="4"/>
</TransformGroup>
</polygon.RenderTransform>
</polygon>
</ControlTemplate>
</Button.Template>
</Button>
<!-- Bottom-left element-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.BottomLeft}" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.BottomLeft}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<polygon Points="4,ConverterParameter={x:Static local:OrientationEditorDirection.BottomLeft}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</polygon.Resources>
<polygon.RenderTransform>
<TransformGroup>
<RotateTransform Angle="225"/>
<TranslateTransform X="40" Y="4"/>
</TransformGroup>
</polygon.RenderTransform>
</polygon>
</ControlTemplate>
</Button.Template>
</Button>
<!-- Left element-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.Left}" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.Left}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<polygon Points="4,ConverterParameter={x:Static local:OrientationEditorDirection.Left}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</polygon.Resources>
<polygon.RenderTransform>
<TransformGroup>
<RotateTransform Angle="270"/>
<TranslateTransform X="40" Y="4"/>
</TransformGroup>
</polygon.RenderTransform>
</polygon>
</ControlTemplate>
</Button.Template>
</Button>
<!-- Top-Left element-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.TopLeft}" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.TopLeft}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<polygon Points="4,ConverterParameter={x:Static local:OrientationEditorDirection.TopLeft}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</polygon.Resources>
<polygon.RenderTransform>
<TransformGroup>
<RotateTransform Angle="315"/>
<TranslateTransform X="40" Y="4"/>
</TransformGroup>
</polygon.RenderTransform>
</polygon>
</ControlTemplate>
</Button.Template>
</Button>
<!-- Circle around center-->
<Ellipse Height="28" Width="28" Canvas.Left="32" Canvas.Top="32" Style="{StaticResource EllipseStyle}"/>
<!-- Circle around center-->
<Button Command="{Binding SelectNewOrientationCommand}" CommandParameter="{x:Static local:OrientationEditorDirection.Center}" Canvas.Left="39" Canvas.Top="39" >
<Button.Visibility>
<MultiBinding Converter="{StaticResource SensorOrientationorientationdisplayConverter}" ConverterParameter="{x:Static local:OrientationEditorDirection.Center}">
<Binding Path="ReadOnly"></Binding>
<Binding Path="SelectedDirections"></Binding>
<Binding Path="AllowCenterPosition" RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type UserControl}}"></Binding>
</MultiBinding>
</Button.Visibility>
<Button.Template>
<ControlTemplate>
<Ellipse Height="14" Width="14">
<Ellipse.Resources>
<Style targettype="Ellipse" BasedOn="{StaticResource CenterEllipseStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedDirections,ConverterParameter={x:Static local:OrientationEditorDirection.Center}}" Value="True" >
<Setter Property="Fill" Value="{Binding Color}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Resources>
</Ellipse>
</ControlTemplate>
</Button.Template>
</Button>
</Canvas>
</Grid>
</UserControl>
我需要在另一个组件中重用它,它应该适合更小的尺寸。 所以我尝试在我的组件周围使用一个 ViewBox,以适应其中的项目。
<ViewBox Width="58" Height="58" Stretch="Fill" >
<sensorOrientationEditor:OrientationEditor SelectedDirections="{Binding Directions}"
Color="{Binding Probes[0],Converter={StaticResource ColorConverter}}"
ReadOnly ="True" Margin="0" Padding="0">
</sensorOrientationEditor:OrientationEditor>
</ViewBox>
它几乎起作用了,但我有一些小部分超出了我的 ViewBox 的大小(与 Visual Studio 检查员确认):
并且圆圈不在 ViewBox 的中心。
知道我错过了什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)