【问题标题】:In XAML, how can I keep an ellipse being a circle?在 XAML 中,如何将椭圆保持为圆形?
【发布时间】:2010-10-28 19:42:38
【问题描述】:

恐怕我对 XAML 视而不见。我正在开发一个 MS Surface 应用程序,我在 ScatterViewItem 中有一个椭圆(最终用户可以调整大小的容器)。我想将椭圆保持为圆形(宽度 == 高度)并使其尽可能大(对于椭圆的宽度/高度属性,应采用 SVI 的宽度/高度的最低值)。

首选仅 XAML 的解决方案(使用属性触发器或类似方法)。

我们一如既往地感谢您的帮助。

【问题讨论】:

    标签: wpf triggers properties ellipse


    【解决方案1】:

    一个简单的Viewbox 可以解决问题吗?例如

    <Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        HorizontalAlignment="Center"
        VerticalAlignment="Center">
        <Canvas Width="100" Height="100">
            <Ellipse Fill="Red" Width="100" Height="100" />
        </Canvas>
    </Viewbox>
    

    Viewbox 将缩放其内容以填充Viewbox 的区域,默认情况下按比例缩放。当Ellipse 无法拉伸到全尺寸时(由于按比例缩放),指定的水平和垂直对齐方式使Ellipse 居中。

    【讨论】:

    • 太棒了!精彩(我至少需要 15 个字符才能告诉你)
    【解决方案2】:
    <Ellipse x:Name="anEllipse" Width={Binding Path=ActualHeight ElementName=anEllipse} />
    

    如果你也做了一个相对绑定,你可能不命名它。

    【讨论】:

    • 如果边界框的高度大于宽度怎么办?在那种情况下,我想要 Height=ActualWidth。
    • 在这种情况下,您需要编写代码来执行此操作 - 即您想要进行贪婪的大小调整以保持纵横比(有点像电影播放器​​的做法,切换它的基础它的大小取决于哪个轴更大)
    • 我就是这么想的。太糟糕了,但没问题。谢谢
    【解决方案3】:

    几分钟前我偶然发现了这个问题,并找到了比@Paul Betts 更好的解决方案(如果可以的话,我会评论他的回答,但我不能)

    您可以简单地使用&lt;Ellipse Stretch="Uniform" /&gt; 来获得一个圈子。

    来源:http://forums.silverlight.net/t/160615.aspx

    【讨论】:

    • 这是迄今为止最好的解决方案。
    • 为了让它与 WPF 一起工作,我必须使这个UniformToFill
    • @Mitch 仅当包含椭圆的父级未提供椭圆的高度/宽度并且您未在椭圆上指定高度或宽度时。不过好点,我不知道UniformToFill 存在。
    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多