日期:2014-05-17  浏览次数:21230 次

WPF控件属性问题:Height和width,margin
我先自定义了一个UserControl,然后在别的窗口中使用它。
就比如这个UserControl是一个正方形里面放一个圆吧(预设大小为200×200),我的初始设定是让圆在正方形的中心,圆的直径是正方形边长的一半。
现在我要在窗口中引用这个UserControl,但是大小和当初设定的不一样,就比如是300×300吧,我想让UserControl的布局和比例不改变,就是说圆还在正方形的中心(别说用VerticalAlignment=“center”,那如果我不放在中心呢),直径还是正方形边长的一半。这样的话,怎么来设定圆的Height、Width和Margin值。
我找过教程,说是用依赖属性,可是这个没有详细的介绍,有谁知道怎么做吗?最好给个样例代码。

------解决方案--------------------

把原始目标元素的属性绑定给目标元素,原始元素改变后,目标元素也改变,这个的FrameworkElement对象是WPF支持的控件
/// <summary>
        /// 元素绑定
        /// </summary>
        /// <param name="eleSrc">原始元素</param>
        /// <param name="eleDes">目标元素</param>
        /// <remarks>
        private void Bind(FrameworkElement eleSrc, FrameworkElement eleDes)
        {
            Binding oBindWidth = new Binding();
            oBindWidth.Source = eleSrc;
            oBindWidth.Path = new PropertyPath(FrameworkElement.WidthProperty);
            oBindWidth.Mode = BindingMode.TwoWay;
            eleDes.SetBinding(FrameworkElement.WidthProperty, oBindWidth);

            Binding oBindHgiht = new Binding();
            oBindHgiht.Source = eleSrc;
            oBindHgiht.Path = new PropertyPath(FrameworkElement.HeightProperty);
            oBindHgiht.Mode = BindingMode.TwoWay;
            eleDes.SetBinding(FrameworkElement.HeightProperty, oBindHgiht);
        }

------解决方案--------------------
引用:
引用:用ViewBox
XML/HTML code?123<Viewbox Stretch="Uniform"><你的圆></Viewbox>不懂,我还在试上面那个呢

<UserControl>
<ViewBox Stretch="Uniform">
<圆>
</ViewBox>
</UserControl>