2014-04-15 6 views
0

Мне нужно выяснить, как изменить UserControl'sWidth и Height во время выполнения. Я пытаюсь сделать это во время события mouseMove. Width и Height установлены в Auto в XAML.Изменение ширины и высоты на UserControl во время выполнения

'mouseDown event 
mouseVerticalPosition = e.GetPosition(Nothing).Y 
mouseHorizontalPosition = e.GetPosition(Nothing).X 

'mouseMove event 
Dim deltaV As Double = e.GetPosition(Nothing).Y - mouseVerticalPosition 
Dim deltaH As Double = e.GetPosition(Nothing).X - mouseHorizontalPosition 

Me.Width = Me.Width + deltaH 
UpdateLayout() 'does not work 

Этот код находится внутри UserControl а не Page где UserControl жизнь - если это помогает.

Рассмотрим контейнер и его свойства - авто и растягиваться используются здесь:

<Grid x:Name="LayoutRoot" Background="Transparent" > 
<Canvas Name="cnv" Margin="18"> 
     <Rectangle Name="Rect" Margin="0" /> 
</Canvas> 
</Grid> 

ответ

1

Фактическое числовое значение из Auto установки на Width или Height является Double.NaN. Когда вы добавляете что-либо к этому начальному значению NaN, результат всегда будет оставаться NaN. Вы можете либо использовать ActualWidth/ActualHeight вместо числа, чтобы добавить или попробовать добавить Double.IsNaN, прежде чем устанавливать значение, и если true, используйте только ActualWidth/ActualHeight.

+0

Это свойства «ReadOnly», поэтому, я думаю, я не понимаю, как их использовать. Я даже пытался начать с фиксированного размера, чтобы избежать NaN. – OneFineDay

+0

Я обнаружил, что если я установил все три (UC, Grid, Canvas) на размер, который изменит Width, но мне нужно, чтобы Grid и Canvas изменяли размер (растягивание) на UC - что не происходит, если они установлены к Авто и UC установлен в размер в целом. Очень смущает! – OneFineDay

+0

Width = ActualWidth + deltaH –

Смежные вопросы