Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удается убрать контур кнопки 
:(
    Опции темы
Compositum
  Дата 26.7.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Код:
Код

    class MyMainWindow : Window
    {
        Grid grid;
        RadialGradientBrush brush;
        Point point;
        TextBlock text;

        public MyMainWindow()
        {
            WindowStyle = WindowStyle.ThreeDBorderWindow;
            ResizeMode = ResizeMode.CanResizeWithGrip;            
            grid = new Grid();
            grid.ShowGridLines = true;
            RowDefinition row1 = new RowDefinition();
            ColumnDefinition column1 = new ColumnDefinition();
            ColumnDefinition column2 = new ColumnDefinition();
            grid.RowDefinitions.Add(row1);
            grid.ColumnDefinitions.Add(column1);
            grid.ColumnDefinitions.Add(column2);
            Content = grid;
            brush = new RadialGradientBrush(Colors.Gray, Colors.Black);
            Background = brush;
            //brush.GradientStops.Add(new GradientStop(Colors.Red, 0.5));
            brush.ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation;
            brush.Center = new Point(0.5, 0.5 );
            brush.MappingMode = BrushMappingMode.RelativeToBoundingBox;
            brush.SpreadMethod = GradientSpreadMethod.Pad;
            brush.GradientOrigin = new Point(0.5, 0.5);
            text = new TextBlock();            
            text.Inlines.Add("Чёрная кошка");
            text.Inlines.FirstInline.FontSize = 12;            
            grid.Children.Add(text);
            Grid.SetRow(text, 0);
            Grid.SetColumn(text, 1);
            text.HorizontalAlignment = HorizontalAlignment.Center;
            text.VerticalAlignment = VerticalAlignment.Center;
            Button button = new Button { Content = "Кнопка" };
            grid.Children.Add(button);
            Grid.SetColumn(button, 0);
            Grid.SetRow(button, 0);
            button.HorizontalAlignment = HorizontalAlignment.Center;
            button.VerticalAlignment = VerticalAlignment.Center;
            button.Background = Brushes.Transparent;
            button.BorderBrush = Brushes.Transparent;
            button.BorderThickness = new Thickness(0);
        }
        protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e)
        {
            base.OnMouseMove(e);
            double width = ActualWidth - SystemParameters.ResizeFrameVerticalBorderWidth * 2;
            double height = ActualHeight - SystemParameters.ResizeFrameHorizontalBorderHeight * 2 -
                SystemParameters.CaptionHeight;
            point = new Point(e.GetPosition(this).X / width, e.GetPosition(this).Y / height);
            brush.GradientOrigin = point;
            brush.Center = point;
            brush.RadiusX = 0.1;
            brush.RadiusY = 0.1;            
            if (e.OriginalSource is Run)
            {
                text.Foreground = new LinearGradientBrush(Colors.Yellow, Colors.Green, 30);
                Title = "Кошка найдена.";                
            }
            else
            {
                text.Foreground = Brushes.Black;
                Title = "Ищем чёрную кошку в чёрной комнате...";
            }
        }
    }


Почему не пропадает граница кнопки, несмотря на то, что сделано так:
Код

button.BorderBrush = Brushes.Transparent;
button.BorderThickness = new Thickness(0);


???

Выглядит результат так: 

user posted image
PM   Вверх
SamMan
Дата 26.7.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Значица... тут 2 проблемы и обе от дефолтных тем Windows(есть OS такая smile )типа Аеро-Роял(а то что применена именно такая - зуб даю  smile ибо скриншот):
1. Они применяют логику отрисовки которая местами пилюет на все ваши значения свойств. Даже выставленные локально, "в лоб". Я называю такие заподляны "маленькие очаровашки WPF".  smile 
2. Когда что-то получает клав. фокус эти же темы своими гадкими тригерами начинают рисовать всякую фигню. Интересно году так в 2100-м кнопки с фокусом все так же будут обводиться этой позорной пунктирной рамочкой? Ну да ладно, это лирика...

Итак, от п.2 избавиться довольно легко: button.Focusable=false; Если, конечно, у нас нет причин удерживать фокус на кнопке. П.1 - похитрее. Самым цивилизованным образом ведет себя классик-тема. Вот ее и надо нашему приложению насильно-добровольно втюхать. Т.е. в конст-ре окна пишем:
Код

[STAThread]
public static void Main()
{
    Application a=new Application();
    a.Startup+=(object sender, StartupEventArgs e) =>
    {
        Uri uri=new Uri("PresentationFramework.Classic;V3.0.0.0;31bf3856ad364e35;component\\themes/classic.xaml", UriKind.Relative);
        a.Resources.MergedDictionaries.Add(Application.LoadComponent(uri) as ResourceDictionary);
    };
    Window1 w1=new Window1();
    a.Run(w1);
}


И, по идее, телемаркет... Если нужно что бы в целом приложение оставалось под Аэро, а одна только кнопка нет - тогда берем готовый шаблон кнопки из классика и применяем ее индивидуально к кнопке. Тут код не привожу ибо много(с одной стороны), но элементарно(с другой) - чистый Ctrl+C/Ctrl+V.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0995 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.