首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用代码隐藏更改在C#中添加到画布的UserControl的宽度?

如何使用代码隐藏更改在C#中添加到画布的UserControl的宽度?
EN

Stack Overflow用户
提问于 2016-01-24 14:25:37
回答 2查看 800关注 0票数 1

使用Visual Studion 2015,C# Metro风格的应用程序只能在Code Code中工作。

问题:我在画布上添加了一个userControl。我想更改控件的宽度。

画布提供了两个函数来移动UserControls: Canvas.SetLeft、Canvas.SetTop

这两个函数工作正常,所以我知道访问控件属性是可能的。我正在尝试访问UserControl (StickyNote)的width属性,以调整画布上控件的大小。将StickyNote添加到画布时,默认情况下将其设置为200x200大小。

当我将鼠标光标移动到画布上的UserControl上时,将调用Control_ManipulationDelta。这段代码在我的Main.xaml页面中。

代码语言:javascript
复制
private void Control_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    // StickyNote is my custom class that is added to the canvas
    StickyNote myControl2 = (StickyNote)sender;

    // Calculating the new location of the mouse
    xPoint = xPoint + e.Delta.Translation.X;
    yPoint = yPoint + e.Delta.Translation.Y;

    // Setting the controls left and top based on mouse position
    Canvas.SetLeft(myControl2, Canvas.GetLeft(myControl2) + xPoint);
    Canvas.SetTop(myControl2, Canvas.GetTop(myControl2) + yPoint);

    // Resetting our points
    xPoint = 0;
    yPoint = 0;

    // Setting Width - works to send values to custom control
    // But the canvas fails to update.
    myControl2.SetValue(WidthProperty,  800); // 500 to 800 as test. 
}

StickyNote是一个在XAML页面上有一个文本字段的UserControl。当WidthProperty的SetValue被调用时,它进入StickNote代码并将宽度更新为800。即使宽度参数设置为800,它在画布上也不会更改。它显示了StickyNote和ManipulationDelta中的更改。这是一个持久的变化,并在下一次调用ManipulationDelta时显示出来。画布不会将文本字段更新为新大小。

代码语言:javascript
复制
// here is the code that I used to setup my DependencyObject    
public  partial class StickyNote : UserControl, IPlugin, INotifyPropertyChanged
{
    // Constructor
    // Functions

    // Update control property width
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new   PropertyChangedEventArgs(propertyName));
        }
    }

    private static void OnWidthPropertyChanged(DependencyObject                    
                                  DependencyObject,  
                                  DependencyPropertyChangedEventArgs e)
   {
        StickyNote myUserControl = dependencyObject as StickyNote;
        myUserControl.OnPropertyChanged("Width");
        myUserControl.OnWidthPropertyChanged(e);
   }

   private void OnWidthPropertyChanged(DependencyPropertyChangedEventArgs e)
   { 
       Width = (double)e.NewValue;           
   }
}

希望有人能给我看一个代码样本,改变添加到画布上的自定义控件的宽度,或者给我指出正确的方向。谢谢你,雷

EN

回答 2

Stack Overflow用户

发布于 2016-01-24 16:05:18

例如,您的文本字段的绝对Width可能为300。如果是这样的话,是否调整外部容器的大小并不重要。它将始终将其Width设置为300。如果希望在调整包含文本字段宽度(StickyNote)的UserControl大小时更改其宽度,请不要在文本字段上指定任何宽度属性(MinWidthMaxWidthWidth),并将其HorizontalAlignment设置为Stretch

票数 0
EN

Stack Overflow用户

发布于 2016-01-25 01:42:08

解决方案是修复我的XAML。我在宽度和高度上有硬编码的尺寸。还需要查看最小宽度和最小高度。这些需要绑定到我使用Dependency对象设置的属性。希望这对其他可能面临类似问题的人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34972886

复制
相关文章

相似问题

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