WPF: Border.BorderThickness = 0 не работает - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть следующий xaml:

<UserControl x:Class="MyCompany.MyApp.MySubModule.Views.MyView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="43" d:DesignWidth="115">
    <Grid>
        <Border Margin="20, 0, 0, 0" CornerRadius="0, 10, 10, 0" BorderBrush="Transparent" BorderThickness="0">
            <Border.Background>
                <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                    <GradientStopCollection>
                        <GradientStop Color="#0066CC" Offset="0" />
                        <GradientStop Color="#0075EA" Offset="1" />
                    </GradientStopCollection>
                </LinearGradientBrush>
            </Border.Background>
        </Border>
    </Grid>
</UserControl>

Что бы я ожидал, это то, что Border не будет иметь толщины (то есть не будет видимым). Но на самом деле вы можете видеть это. Почему это так, и как мне заставить его уйти?

Ответы [ 4 ]

3 голосов
/ 17 ноября 2011

Граница в вашем коде не видна. Возможно, вы завернули свой пользовательский контроль в другую границу или контроль с границей.

Или, может быть, вы думаете о фоне? Установка Background-свойства границы заполняет область, покрытую из border-элемента. Чтобы скрыть весь элемент, установите для свойства Visibility границы значение Hidden или Collapsed или используйте прозрачную кисть в качестве фона границ.

BorderBrush и BorderThickness предназначены только для рисования границы (элемента управления). Однако Border-контроль - это элемент декоратора, который имеет свою собственную область (область, которую должен иметь его дочерний элемент управления).

1 голос
/ 17 ноября 2011

Это, кажется, характерно для дизайнера Visual Studio, оно не отображается в Blend или если вы действительно используете элемент управления. Я поместил несколько из них в StackPanel, и между ними не было разрыва.

0 голосов
/ 14 апреля 2015

Я знаю, что это старый вопрос, но я только что столкнулся с той же проблемой, и решение (для меня) отличается от тех, которые были опубликованы раньше.

Поддельная "граница" (для меня) была вызвана сглаживаниемалгоритмы компоновки движка.Это привело к тому, что некоторые линии границы были «сглажены» и отрисованы на нескольких пикселях (и даже если предполагалось, что они невидимы, часто оставались некоторые артефакты).

Решение: убедитесь, что измерения макетаокругляются до целых пикселей, устанавливая для свойства UseLayoutRounding корневого элемента значение «True».(MSDN утверждает, что по умолчанию установлено значение true, но, похоже, это не обязательно так).

Более подробное объяснение и примеры: http://blogs.msdn.com/b/text/archive/2009/08/27/layout-rounding.aspx

0 голосов
/ 17 ноября 2011

Я должен признать, что сам использовал бы атрибут Visibility, например

<Border Visibility="Visibility.Hidden" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...