У меня есть проект, который требует перетаскивания пользовательского элемента управления (размещенного внутри сетки) вокруг экрана. Это прекрасно работает на код ниже:Проверьте, находится ли пользовательский контроль в пределах оконных окон
void MyUserControl_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
var ct = (CompositeTransform) RenderTransform ?? new CompositeTransform {CenterX = 0.5, CenterY = 0.5};
ct.TranslateX += e.Delta.Translation.X;
ct.TranslateY += e.Delta.Translation.Y;
}
Вопрос заключается в том, что пользовательский элемент управления можно перетаскивать весь путь из области экрана. Чтобы предотвратить это, я попытался пример, показанный здесь: http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta.aspx
К сожалению, он использует containingRect.Contains (shapeBounds), тогда как в Windows 8, мы, как ожидается, заменит shapeBounds (это прямоугольник) с точки. Я не уверен, как с этим работать.
Итак, вопрос в том, как мы можем гарантировать, что пользовательский элемент управления или любой UIElement нельзя вытащить из области Window.Current.Bounds в приложении для хранения приложений на окнах 8?
Спасибо.
РЕДАКТИРОВАТЬ: Более подробную информации о структуре XAML:
На главной странице содержит сетку с горизонтальным и вертикальным выравниванием набором, чтобы растянуть. Пользовательские элементы управления добавляются в эту сетку по мере необходимости. Каждый usercontrol имеет родительскую сетку, которая содержит 3 разных вида (полноэкранный, оконный и малый). Представления отображаются по выбору пользователя. Поведение сопротивления должно применяться только при отображении сетки окон. Таким образом, у нас есть это
<Grid> <!-- this is the parent grid on mainpage with horizontal and vertical alignment to stretch-->
<Grid> <!-- this is the usercontrol's main grid (added to above grid via code). This grid must be draggable if the below grid is window -->
<Grid /> <!-- this is one of the child grids that is shown based on user's choice (fullscreen, window or small view).-->
</Grid>
</Grid>
У меня нет большого выбора в изменении макета. Используя указанное выше событие ManipulationDelta в usercontrol (которое включено/отключено на основе представленной дочерней сетки), я могу получить поведение перетаскивания, но элемент управления может выйти из оконных границ. Итак, есть ли способ добавить ниже FlickBehavior в WinRTXamlToolkit через код вместо xaml ИЛИ включить/отключить поведение, основанное на некоторых условиях?
<i:Interaction.Behaviors>
<views:HeavyFlickBehavior />
</i:Interaction.Behaviors>
Где твой UserControl? в холсте? – Xyroid
Он находится внутри сетки, но может быть перемещен на холст, если использование сетки является проблемой. – Girish
Я думаю, вам нужно вручную проверить, находится ли край пользовательского контроля рядом с привязкой или без использования 'TransformToVisual' и' TransformPoint' – Xyroid