使用Visual Studion 2015,C# Metro风格的应用程序只能在Code Code中工作。
问题:我在画布上添加了一个userControl。我想更改控件的宽度。
画布提供了两个函数来移动UserControls: Canvas.SetLeft、Canvas.SetTop
这两个函数工作正常,所以我知道访问控件属性是可能的。我正在尝试访问UserControl (StickyNote)的width属性,以调整画布上控件的大小。将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是一个在XAML页面上有一个文本字段的UserControl。当WidthProperty的SetValue被调用时,它进入StickNote代码并将宽度更新为800。即使宽度参数设置为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;
}
}希望有人能给我看一个代码样本,改变添加到画布上的自定义控件的宽度,或者给我指出正确的方向。谢谢你,雷
发布于 2016-01-24 16:05:18
例如,您的文本字段的绝对Width可能为300。如果是这样的话,是否调整外部容器的大小并不重要。它将始终将其Width设置为300。如果希望在调整包含文本字段宽度(StickyNote)的UserControl大小时更改其宽度,请不要在文本字段上指定任何宽度属性(MinWidth、MaxWidth、Width),并将其HorizontalAlignment设置为Stretch。
发布于 2016-01-25 01:42:08
解决方案是修复我的XAML。我在宽度和高度上有硬编码的尺寸。还需要查看最小宽度和最小高度。这些需要绑定到我使用Dependency对象设置的属性。希望这对其他可能面临类似问题的人有所帮助。
https://stackoverflow.com/questions/34972886
复制相似问题