首页 文章

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

提问于
浏览
1

使用Visual Studion 2015,C#Metro Style应用程序仅在Code Behind中工作 .

问题:我已将userControl添加到画布 . 我想改变控件的宽度 .

该画布提供了两个用于移动UserControls的函数:Canvas.SetLeft,Canvas.SetTop

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

当我将鼠标光标移动到画布上的UserControl上时,将调用Control_ManipulationDelta . 此代码位于我的Main.xaml页面中 .

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是一个UserControl,在XAML页面上有一个文本字段 . 当调用SetValue for WidthProperty时,它会进入StickNote代码并将Width更新为800.即使Width参数设置为800,它也不会在画布上更改 . 它显示了StickyNote和ManipulationDelta中的变化 . 这是一个持久的变化,并在下次调用ManipulationDelta时出现 . 画布不会将文本字段更新为新大小 .

// 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;           
   }
}

希望有人可以向我展示一个代码示例,它可以更改添加到画布的自定义控件的宽度,或者指向正确的方向 . 谢谢你,雷

2 回答

  • 0

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

  • 0

    解决方案是修复我的XAML . 我在宽度和高度上有硬编码大小 . 还需要查看Min Minidth和Min Height . 这些需要绑定到我使用Dependency Object设置的属性 . 希望这有助于其他可能面临类似问题的人 .

相关问题