Как я могу предотвратить отображение элементов WPF UserControl за пределами желаемого диапазона просмотра? - PullRequest
1 голос
/ 17 июля 2010

Я пытаюсь преобразовать свое приложение WPF в пользовательский элемент управления WPF. В исходном приложении я намеренно изменил поля некоторых элементов, чтобы их края не выходили за границы окна. Я сделал это для того, чтобы скрыть нежелательные границы, от которых я не смог бы избавиться без написания собственного шаблона управления. Это было простое исправление, но, к сожалению, этот метод не работает, когда мое приложение превращается в UserControl. Если я установлю ширину моего UserControl равной ширине окна моего исходного приложения, при просмотре этого UserControl в тестовом приложении элементы, границы которых я хотел скрыть, теперь полностью видны.

Мне не имеет смысла, почему это произошло. Если я установлю ширину UserControl на определенную WIDTH, то ширина UserControl должна быть равна WIDTH, верно? Итак, как вы можете видеть ниже на рисунке 1, все элементы UserControl полностью видны, независимо от того, какой я установил WIDTH. Желаемый визуальный элемент (тот, который я использовал для получения исходного приложения) показан на рисунке 2, где элементы должным образом обрезаны по границам окна.

Моя проблема http://img715.imageshack.us/img715/1807/probleme.png

Как я могу гарантировать, что элементы с отрицательными полями будут отображаться так, как я хочу, в UserControl? Любая помощь в достижении этого будет принята с благодарностью.

Большое спасибо,

Dalal

Ответы [ 2 ]

4 голосов
/ 17 июля 2010

Вы пытались установить свойство ClipToBounds для ваших элементов в UserControl на True?

0 голосов
/ 17 июля 2010

Внутри вашего пользовательского элемента управления установите для свойства Clip контейнера, например, Grid, размер (ширина, высота) пользовательского элемента управления.

Например,

<Window x:Class="TestClipping.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="Auto" Width="Auto">
    <Grid SizeChanged="OnGridSizeChanged"
          x:Name="myGrid">

    </Grid>
</Window>

и обработчик события:

private void OnGridSizeChanged(object sender, SizeChangedEventArgs e)
{
    // Set the clipping region to match the current display region of the grid.
    var visibleArea = new RectangleGeometry();
    visibleArea.Rect = new Rect(0, 0,
    myGrid.ActualWidth, myGrid.ActualHeight);
    myGrid.Clip = visibleArea;
}
...