powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Помогите с великом-КнопкаКартинка
14 сообщений из 14, страница 1 из 1
Помогите с великом-КнопкаКартинка
    #39191426
Света7415
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветик всем!

Наверное, все сталкивались - свою кнопочку сотворить...
Сделала такую:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
        <Style x:Key="MenuButton" TargetType="Button">
            <Setter Property="Height" Value="18" />
            <Setter Property="Width" Value="18" />
            <Setter Property="Background" Value="AliceBlue" />
            <Setter Property="BorderBrush" Value="AliceBlue" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <Rectangle Fill="{TemplateBinding Background}"
                                    Stroke="{TemplateBinding BorderBrush}" />
                            <Rectangle  Width ="16" Height="16"
                                Fill="{TemplateBinding Foreground}" 
                                VerticalAlignment="Center" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="#FF9BC0CB"/>
                    <Setter Property="BorderBrush" Value="Navy"/>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Background" Value="#FF778E95"/>
                    <Setter Property="BorderBrush" Value="Red"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Background" Value="LightGray"/>
                    <Setter Property="BorderBrush" Value="LightGray"/>
                    <Setter Property="Opacity" Value="50" />
                </Trigger>
            </Style.Triggers>
        </Style>



Проблематика:
1.
Код: xml
1.
2.
            <Setter Property="Background" Value="AliceBlue" />
            <Setter Property="BorderBrush" Value="AliceBlue" />

Хотелось бы "как у родителя"

2.(опционально)
Код: xml
1.
Fill="{TemplateBinding Foreground}"

Какой-то "кривой" параметр, может есть лучше решения?

3.
Код: xml
1.
<Setter Property="Opacity" Value="50" />

Как сделать тут картинку монохромной вместо этого, что логично?

Заранее спасибо
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39191451
Света7415
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS
Если гуглить по теме, всегда попадется кнопки с конкретными картинками, хотя именно картинку логичнее параметризировать!?
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39191517
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лично я использую только векторные иконки, следовательно можно им задать цвет текста, если текст синий, картинка синяя, если черный чёрная и т.д.
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39191831
Света7415
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,
во-первых, это не красиво
во-вторых, какое отношение к не енаблед кнопках?
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39191874
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Света7415,
Так вам нужна просто кнопка с картинкой? Чем свойство Content кнопки не устраивает? Там может быть всё, что угодно, и картинки в т.ч.
Света7415Как сделать тут картинку монохромной вместо этого, что логично?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class AutoGreyableImage : Image
{
  static AutoGreyableImage()
  {
    IsEnabledProperty.OverrideMetadata(typeof(AutoGreyableImage),
      new FrameworkPropertyMetadata(true, OnAutoGreyScaleImageIsEnabledPropertyChanged));
  }

  private static void OnAutoGreyScaleImageIsEnabledPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs args)
  {
    var image = source as AutoGreyableImage;
    if (image == null || image.Source == null) return;
    var isEnable = Convert.ToBoolean(args.NewValue);
    if (!isEnable)
    {
      var bitmapImage = new BitmapImage(new Uri(image.Source.ToString()));
      image.Source = new FormatConvertedBitmap(bitmapImage, PixelFormats.Gray32Float, null, 0);
      image.OpacityMask = new ImageBrush(bitmapImage);
    }
    else
    {
      var imgSrc = image.Source as FormatConvertedBitmap;
      if (imgSrc != null)
        image.Source = imgSrc.Source;
      image.OpacityMask = null;
    }
  }
}


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
<Window
  x:Class="wpftest.MainWindow"
  x:Name="wndMain"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:l="clr-namespace:wpftest"
  TextOptions.TextFormattingMode="Display"
  UseLayoutRounding="True"
  SnapsToDevicePixels="True"
  Width="700"
  Height="700">

  <Window.Resources>
    <Style TargetType="{x:Type l:AutoGreyableImage}">
      <Setter Property="Stretch" Value="None"/>
      <Setter Property="HorizontalAlignment" Value="Center"/>
      <Setter Property="VerticalAlignment" Value="Center" />
      <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
          <Setter Property="Opacity" Value="0.4"/>
        </Trigger>
      </Style.Triggers>
    </Style>
    <Style TargetType="{x:Type Button}">
      <Setter Property="VerticalAlignment" Value="Center" />
      <Setter Property="HorizontalAlignment" Value="Center" />
      <Setter Property="Padding" Value="5" />
      <Setter Property="Margin" Value="5" />
    </Style>
    <Style TargetType="{x:Type TextBlock}">
      <Setter Property="HorizontalAlignment" Value="Center" />
      <Setter Property="Margin" Value="5" />
    </Style>
  </Window.Resources>
  <StackPanel Orientation="Horizontal">
    <Button>
      <StackPanel>
        <l:AutoGreyableImage Source="/wpftest;component/picture.png"/>
        <TextBlock Text="Enabled button" />
      </StackPanel>
    </Button>
    <Button IsEnabled="False">
      <StackPanel>
        <l:AutoGreyableImage Source="/wpftest;component/picture.png"/>
        <TextBlock Text="Disabled button" />
      </StackPanel>
    </Button>
  </StackPanel>
</Window>
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39191876
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(на левую кнопку на скриншоте наведен курсор мыши)
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39192183
Света7415
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,
круто, спасибо!
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39192269
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я просто к тому, что лучше использовать векторные картинки в WPF, чем растровые, с растром больше гемороя, особенно, если dpi не идеальный. Я знаю массу способов добиться аутентичного качества растровой картинки в WPF, но когда начал использовать только векторные понял, что это просто каменный век и вообще не стоит даже использовать все эти извращения.
+ вектор дает масштабируемость, управление цветом, широкий спектр возможностей для анимации иконок, универсальность иконок при любом стиле.
Нужно искоренять растровую графику из WPF, а последователей сжигать на кострах :)
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39192291
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, привет, а, кстати, где ты берешь типовые векторные иконки в формате Geometry (типа той корзинки, которую ты использовал в примере для кнопки удаления)?
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39192376
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesя просто к тому, что лучше использовать векторные картинки в WPF, чем растровые, с растром больше гемороя, особенно, если dpi не идеальный. Я знаю массу способов добиться аутентичного качества растровой картинки в WPF, но когда начал использовать только векторные понял, что это просто каменный век и вообще не стоит даже использовать все эти извращения.
+ вектор дает масштабируемость, управление цветом, широкий спектр возможностей для анимации иконок, универсальность иконок при любом стиле.
Нужно искоренять растровую графику из WPF, а последователей сжигать на кострах :)
Вам персональное задание: найти/нарисовать в векторе ту картинку, которая на кнопке на моем скрине. В растре эта картинка ищется элементарно: она из imageres.dll.
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39192549
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныRoman Mejtesя просто к тому, что лучше использовать векторные картинки в WPF, чем растровые, с растром больше гемороя, особенно, если dpi не идеальный. Я знаю массу способов добиться аутентичного качества растровой картинки в WPF, но когда начал использовать только векторные понял, что это просто каменный век и вообще не стоит даже использовать все эти извращения.
+ вектор дает масштабируемость, управление цветом, широкий спектр возможностей для анимации иконок, универсальность иконок при любом стиле.
Нужно искоренять растровую графику из WPF, а последователей сжигать на кострах :)
Вам персональное задание: найти/нарисовать в векторе ту картинку, которая на кнопке на моем скрине. В растре эта картинка ищется элементарно: она из imageres.dll.
я программистом работаю, а не дизайнером\искателем иконок )
иконки мне приносят на блюдечке в формате AI =) дизайнеры
чужими иконками у нас нельзя пользоваться :)
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39192583
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesя программистом работаю, а не дизайнером\искателем иконок )
иконки мне приносят на блюдечке в формате AI =) дизайнеры
чужими иконками у нас нельзя пользоваться :)
Я намекал на то, что ситуация программист - сам себе дизайнер возникает достаточно часто, и вот как раз в ней у растровых изображений очень большое преимущество - просто потому, что они распространены намного больше, в интернете существуют тысячи сайтов с готовыми иконками для кнопок, такие иконки достаточно часто распространяются по всяким open-source лицензиям, итд итп. А так, конечно, да - если есть штатный дизайнер, то можно позволить себе повыбирать между тем форматом, и другим.
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39192635
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesна блюдечке в формате AIА чем дальше перегоняешь AI-шное изображение?
...
Рейтинг: 0 / 0
Помогите с великом-КнопкаКартинка
    #39192876
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProRoman Mejtesна блюдечке в формате AIА чем дальше перегоняешь AI-шное изображение?
Visual Studio Blend, есть еще конверторы из svg.
Ну и существует определенное соглашение между мной и дизайнером, как должна быть сделана иконка в векторе.
для монохромных и цветных иконок они разные, а если нужна анимация, нужно обговаривать каждый случай в отдельности.
дизайнер в AI или хрен знает где еще дизайнер пилит страницу с иконками и выдает этот AI файл мне, я вырезаю нужные мне иконки нужного размера.
Затем импортирую AI файл из Blend'а, на выходе получается как правило 2 или 1 Canvas и в нём 1 или много Path с соответствующей геометрией. Для монохромных иконок я всегда придерживаюсь, 1 иконка, 1 геометрия и саму геометрию, если иконка распространенная я выношу в ресурсы, на тот уровень, где это иконка используется (панели\окна\приложения). И просто использую их в собственном <Path> элементе.
Но есть еще момент с размером, важно помнить отношение размера геометрии, если задаешь размер вручную или Path будет растянут в соответствии с компоновкой элементов.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Помогите с великом-КнопкаКартинка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]