Как я могу предотвратить видимость элементов WPF UserControl за пределами желаемого диапазона просмотра?

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

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

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

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

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

Далал


person Dalal    schedule 16.07.2010    source источник


Ответы (2)


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

person Scott    schedule 16.07.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;
}
person Toan Nguyen    schedule 16.07.2010