首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Arc other上填充Arc?

如何在Arc other上填充Arc?
EN

Stack Overflow用户
提问于 2015-08-07 12:38:16
回答 2查看 247关注 0票数 1

目前,我有两个圆弧,但是有一些颜色错误的小边框(见黑色箭头):xaml:

代码语言:javascript
复制
<Window x:Class="WpfApplication9.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing">
<Grid Width="150" Height="150">
    <ed:Arc
                                        x:Name="BorderArc"
                                        ArcThickness="15"
                                        StrokeThickness="0"
                                        ArcThicknessUnit="Pixel"
                                        StartAngle="270"
                                        EndAngle="45"
                                        Fill="Red"
                                        Stretch="None"
                                        RenderTransformOrigin=".5 .5"
                                        Width="150"
                                        Height="150">
    </ed:Arc>
    <ed:Arc
                                        x:Name="Border"
                                        ArcThickness="15"
                                        StrokeThickness="0"
                                        ArcThicknessUnit="Pixel"
                                        StartAngle="270"
                                        EndAngle="30"
                                        Fill="Gray"
                                        Stretch="None"
                                        RenderTransformOrigin=".5 .5"
                                        Width="150"
                                        Height="150">
    </ed:Arc>
</Grid>

请给我一个解决方案,删除小红边(见黑色箭头)?谢谢你帮我?

EN

回答 2

Stack Overflow用户

发布于 2015-08-07 16:38:54

您可以将灰色弧线的ArcThickness设置为15.1,然后查看是否删除了红色轮廓。

如果给两个圆弧一个单像素的白色边框,会发生什么?

选项1:修改ViewModel

您的ViewModel是否可以修改为像这样处理圆弧:

代码语言:javascript
复制
ArcViewModels = new List<SingleArcViewModel>();

for (var i = 0; i < Arcs.Count; i++)
{
    if (i == 0)
    {
        ArcViewModels.Add(new SingleArcViewModel(Arcs[i].StartAngle, Arcs[i].EndAngle));
    }
    else
    {
        ArcViewModels.Add(new SingleArcViewModel(Arcs[i - 1].EndAngle, Arcs[i].EndAngle));
    }
}

(我假设构造函数首先接受StartAngle,然后是EndAngle)。其中,Arcs是现有的圆弧列表,ArcViewModels是要将视图绑定到的列表。它将每个圆弧的StartAngle设置为前一个圆弧的EndAngle。

我已经在一个简单的应用程序中尝试过了,它工作得很好,显然你必须对你的视图模型做一些修改来处理绑定到的弧线。

选项2:通过IValueConverter运行圆弧收集

您需要创建一个如下所示的Converter类:

代码语言:javascript
复制
public class ArcCollectionConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var arcsCollection = value as ArcViewModel[];
        if (arcsCollection == null)
            return value;

        var result = new List<ArcViewModel>();

        for (var i = 0; i < arcsCollection.Count(); i++)
        {
            if (i == 0)
            {
                result.Add(new SingleArcViewModel(arcsCollection[i].StartAngle, arcsCollection[i].EndAngle));
            }
            else
            {
                result.Add(new SingleArcViewModel(arcsCollection[i - 1].EndAngle, arcsCollection[i].EndAngle));
            }
        }

        return result;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后将以下内容添加到视图中的引用中:

代码语言:javascript
复制
xmlns:cc="clr-namespace:LocalExperiment.Models"

资源:

代码语言:javascript
复制
<Window.Resources>
    <cc:ArcCollectionConverter x:Key="ArcCollectionConverter" />
</Window.Resources>

并在绑定到arcs集合的任何位置使用该转换器:

代码语言:javascript
复制
<ItemsControl ItemsSource="{Binding MyArcs, Converter={StaticResource ArcCollectionConverter}}"></ItemsControl>

您可能需要修改一些类型以使其与您的ViewModel一起工作,但希望这能帮助您入门。

票数 1
EN

Stack Overflow用户

发布于 2015-08-07 19:21:11

你有一个弧线在另一个弧线上。只需修改它们,使其不重叠:

代码语言:javascript
复制
<!-- I have ommited some properties -->
<ed:Arc StartAngle="30" EndAngle="45" Fill="Red" />
<ed:Arc StartAngle="275" EndAngle="30" Fill="Grey" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31869782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档