Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WPF中保持画布溢出_Wpf - Fatal编程技术网

在WPF中保持画布溢出

在WPF中保持画布溢出,wpf,Wpf,我有一个(希望是)有趣的问题 首先,我想做的是: 我正在尝试创建一组类似于饼图的按钮,稍后该控件将在一个支持触摸的应用程序中使用。控件绘制并看起来很好,到目前为止,所有行为都很好。然而,我有一个问题,那就是我对馅饼的所有部分所做的翻译 所以我要做的是:我想在饼片之间留一个边距n,为了创建这个边距,我把所有的饼片从中间移开。这意味着面朝上的饼片将有一个否定的翻译。这反过来意味着画布将剪裁顶部的一部分(例如,由于顶部位于14,-2)。我添加的另一件事是文本片段,这也使饼片变得更长一些。请参见随附的图

我有一个(希望是)有趣的问题

首先,我想做的是:

我正在尝试创建一组类似于饼图的按钮,稍后该控件将在一个支持触摸的应用程序中使用。控件绘制并看起来很好,到目前为止,所有行为都很好。然而,我有一个问题,那就是我对馅饼的所有部分所做的翻译

所以我要做的是:我想在饼片之间留一个边距n,为了创建这个边距,我把所有的饼片从中间移开。这意味着面朝上的饼片将有一个否定的翻译。这反过来意味着画布将剪裁顶部的一部分(例如,由于顶部位于14,-2)。我添加的另一件事是文本片段,这也使饼片变得更长一些。请参见随附的图像以供参考

在左边你可以看到我所说的剪辑问题,在右边你可以看到同一个东西的任意翻译版本

一些代码粘贴:

主窗口XAML:

<controls:PieMenu Radius="100" Padding="10">
<controls:PieMenu.MenuItems>
    <controls:PieMenuItem Text="Employment" Brush="#FF33FF" Command="BrowseBack" />
    <controls:PieMenuItem Text="General" Brush="#9933FF" Command="BrowseBack" />
    <controls:PieMenuItem Text="Internships" Brush="#3333FF" Command="BrowseBack" />
    <controls:PieMenuItem Text="Bla" Brush="#3399FF" Command="BrowseBack" />
    <controls:PieMenuItem Text="Bla" Brush="#007AF5" Command="BrowseBack" />
</controls:PieMenu.MenuItems>

PIEMOUN XAML:

<UserControl x:Class="PieControlLibrary.PieMenu"
         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:self="clr-namespace:PieControlLibrary"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
    <!-- <CollectionViewSource x:Name="menuItemCollectionViewSource" Source="{Binding MenuItems, RelativeSource={RelativeSource AncestorType=self:PieMenu}}"/>-->
    <Style TargetType="{x:Type ListView}" x:Key="listViewStyle">
        <Setter Property="BorderBrush" Value="Transparent" />
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <self:PieButton Radius="{Binding Radius, RelativeSource={RelativeSource AncestorType=self:PieMenu}}" 
                                    Degrees="{Binding Degrees, RelativeSource={RelativeSource AncestorType=self:PieMenu}}"
                                    Brush="{Binding Brush}"
                                    Command="{Binding Command}" 
                                    Text="{Binding Text}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<Grid>
    <ListView x:Name="menuItemsView" ItemsSource="{Binding MenuItems, RelativeSource={RelativeSource AncestorType=self:PieMenu}}" Style="{StaticResource listViewStyle}" />
</Grid>

PieButton(这是pie菜单项转换为的内容)



我不确定我是否理解你的问题,但是当你绘制饼图时,只需在边缘留出一些额外的空间,以便你可以将饼片从中心移出?

我不确定我是否理解你的问题,但是当你绘制饼图时,只需在边缘周围留出一些额外的空间,以便将饼片从中心移出?

当饼片展开时,您可以使用
渲染变换
来移动或缩放图像,使其保持在边界内?

当饼片展开时,您可以使用
渲染变换
将图像缩放一点以使其保持在一定范围内?

很抱歉,回复太晚(我休假了两周),我使用此解决方案的主要问题是,我不知道它的大小,除此之外,它周围显示的文本大小也是可变的。因此,要让任何建议发挥作用,我需要确切地知道每件东西有多大。有一个ActualHeight和ActualWidth属性,我过去在运行时对象大小发生变化时使用过。也许你可以用它吗?嗨,瑞秋,我试过用这些,但问题是文本的比例。但是,由于某些原因,它被编程为缩小(从100磅)实际高度约为100磅字体的预期高度。或者让我这样说:令人痛苦的是,很明显,字体实际高度(与我知道的某个大小的切片相比)属性与视觉比较应该达到的高度相差甚远。很抱歉回复太晚(我休假了两周),这个解决方案的主要问题是,我不知道它的大小有多大,除此之外,它周围显示的文本大小也是可变的。因此,要让任何建议发挥作用,我需要确切地知道每件东西有多大。有一个ActualHeight和ActualWidth属性,我过去在运行时对象大小发生变化时使用过。也许你可以用它吗?嗨,瑞秋,我试过用这些,但问题是文本的比例。但是,由于某些原因,它被编程为缩小(从100磅)实际高度约为100磅字体的预期高度。或者让我这样说:令人痛苦的是,字体的实际高度(与我知道的某个大小的切片相比)属性与视觉比较的高度相差甚远。我留下了额外的空间,主要的问题是我不知道要添加多少额外的空间。因此,如果有人有一些方法来测量文本或任何视觉元素(或元素组合)的大小,我想知道如何做到这一点。我留下了额外的空间,主要的问题是我不知道要添加多少额外的空间。因此,如果有人有一些方法来测量文本或任何视觉元素(或元素组合)的大小,我很想知道如何做到这一点。
<UserControl x:Class="PieControlLibrary.PieButton"
         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:control="clr-namespace:PieControlLibrary"
         xmlns:TextOnPath="clr-namespace:Petzold.TextOnPath"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300"
         >
<Grid>
    <Button HorizontalAlignment="Left" VerticalAlignment="Top" DataContext="{Binding RelativeSource={RelativeSource AncestorType=control:PieButton}}" Command="{Binding Command}">
        <Button.Template>
            <ControlTemplate>
                <Canvas >
                    <Path Data="{Binding PathData}" Fill="{Binding Brush}" Grid.Row="0" Grid.Column="0" />
                    <TextOnPath:TextOnPathControl PathFigure="{Binding TextPath}" Text="{Binding Text}" FontFamily="Consolas" FontSize="12" Foreground="Black" FontStretch="Normal" />
                </Canvas>
            </ControlTemplate>
        </Button.Template>
    </Button>
</Grid>