Привязка свойства Silverlight's Border.Clip RectangleGeometry.Rect - PullRequest
0 голосов
/ 30 июня 2010

У меня есть следующий XAML:

<Border x:Name="ClippingBorder" VerticalAlignment="Stretch" BorderThickness="0">
    <Border.Clip>
        <RectangleGeometry RadiusX="4.4" RadiusY="4.4" Rect="{Binding ClippingRectangle}"/>
    </Border.Clip>
</Border>

И следующий код:

    private Rect clippingRectangle;
    public Rect ClippingRectangle
    {
        get
        {
            return clippingRectangle;
        }
        set
        {
            clippingRectangle = value;
            NotifyPropertyChanged("ClippingRectangle");

        }
    }


    public MainPage()
    {
        InitializeComponent();

        //Get the actual height of the content frame
        ClippingBorder.DataContext = this;
        ContentFrame.SizeChanged += new SizeChangedEventHandler(ContentFrame_SizeChanged);
    }

    void ContentFrame_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        MessageBox.Show(e.NewSize.Height.ToString());
        ClippingRectangle = new Rect(0,0,798,e.NewSize.Height);
    }

Изменение размера работает, но, к сожалению, отсечение не работает из-за того, что закругленные углы не закруглены. Если я подставлю привязку ClippingRectangle для статических значений, она будет работать. Но когда я использую привязку, это не так. Есть ли решение для этого?

Ответы [ 2 ]

2 голосов
/ 09 января 2013

Вы все еще можете связываться из XAML с кодом ниже:

private RectangleGeometry clippingRectangleGeometry;
    public RectangleGeometry ClippingRectangleGeometry
    {
        get
        {
            return clippingRectangleGeometry;
        }
        set
        {
            clippingRectangleGeometry= value;
            NotifyPropertyChanged("ClippingRectangleGeometry");

        }
    }
0 голосов
/ 30 июня 2010

Оказывается, что установка свойства Border.Clip в codebehind решает проблему.

    void ContentFrame_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        RectangleGeometry clipRect = new RectangleGeometry();
        clipRect.Rect = new Rect(0,0,798,e.NewSize.Height);
        clipRect.RadiusX = 4.4;
        clipRect.RadiusY = 4.4;
        ClippingBorder.Clip = clipRect;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...