使用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 回答
例如,您的文本字段可能具有
300
的绝对值 . 如果是这样,您是否调整外部容器的大小并不重要 . 它始终将Width
设置为300
. 如果希望文本字段在调整包含它的UserControl
(StickyNote
)时更改宽度,请不要在文本字段中指定任何宽度属性(MinWidth
,MaxWidth
,Width
)并将其HorizontalAlignment
设置为Stretch
.解决方案是修复我的XAML . 我在宽度和高度上有硬编码大小 . 还需要查看Min Minidth和Min Height . 这些需要绑定到我使用Dependency Object设置的属性 . 希望这有助于其他可能面临类似问题的人 .