2015-05-26 3 views
0

Долгое время, когда я искал качество Управление кнопкой изображения WPF. Мне нужна кнопка, состоящая только из только и позвольте мне установить параметры изображения для зависания и нажатия. Все текущие решения на SO и остальной части Интернета включают в себя CustomTemplate решения, которые не очень дружелюбны (то есть TriState Button).Управление кнопкой изображения WPF

Может быть, есть набор элементов управления, как Modern UI или MahApps, что кто-то может указывать мне, что есть такая кнопка?

+3

В чем проблема с просто установкой изображения в качестве содержимого кнопки? – Domysee

+0

Как насчет изображения наведения и нежелательных эффектов границы элемента управления Button? – eYe

ответ

2

EDIT: Этот элемент управления можно использовать повторно в течение всего проекта столько раз, сколько вам нужно, он действует точно так же, как и любой другой элемент управления, и используется так же, как и любая другая библиотека управления. Эффект границы не действует, и вы можете добавить любой желаемый эффект зависания. Вот как это работает.

Добавить папку с именем CustomControls в ваше решение.

Создайте пользовательский элемент управления (WPF) с именем ImageButton в этой папке. Здесь добавлен настраиваемый код управления.

Теперь в вашем проекте должна была быть создана папка с именем Themes, в которой есть ресурс с именем generic.xaml. Откройте его и используйте код resourcecedictionary.

Теперь добавьте это в окне тега

xmlns:b="clr-namespace:MyProject.CustomControls" 

Теперь вы можете использовать элемент управления в этом окне, как стольких раз, сколько вы хотели бы так же, как обычные кнопки, используя структуру тегов в конце ответ.

Вот что я сделал, вы можете установить источник, высоту и ширину изображения из главного окна, и все стандартные события кнопок есть.

Вот пользовательский элемент управления

namespace MyProject.CustomControls 
{ 
public class ImageButton : Button 
{ 
    public static DependencyProperty SourceProperty = 
     DependencyProperty.Register(
      "Source", 
      typeof(Uri), 
      typeof(ImageButton)); 

    static ImageButton() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(ImageButton), new FrameworkPropertyMetadata(typeof(ImageButton))); 
    } 

    public Uri Source 
    { 
     get { return (Uri)GetValue(SourceProperty); } 
     set { SetValue(SourceProperty, value); } 
    } 
} 

}

Вот стиль в ResourceDictionary, вы можете добавить событие наведения мыши и в button.pressed событие в секции триггеров или удалить триггеры и установить их на вашем окне.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:b="clr-namespace:MyProject.CustomControls"> 

<Style x:Key="{x:Type b:ImageButton}" TargetType="{x:Type b:ImageButton}"> 
    <Setter Property="Height" Value="{Binding Path=Height, RelativeSource={RelativeSource TemplatedParent}}"/> 
    <Setter Property="Width" Value="{Binding Path=Width, RelativeSource={RelativeSource TemplatedParent}}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type b:ImageButton}"> 
       <Grid x:Name="LayoutGrid"> 
        <Image x:Name="_Image" HorizontalAlignment="Center" VerticalAlignment="Center" Width="{TemplateBinding Width}" 
          Source="{Binding Path=Source, RelativeSource={RelativeSource TemplatedParent}}" Height="{TemplateBinding Height}"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="" TargetName="" Value=""/> 
        </Trigger> 
        <Trigger Property="Button.IsPressed" Value="True"> 
         <Setter Property="" TargetName="" Value=""/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Чтобы использовать его в проекте добавить пространство имен к окну, а затем тег будет как этот

<b:ImageButton Source="Image.png" Height="50" Width="50" Click="do_Something"/> 
+0

Я ищу более общий контроль, а не шаблонное решение – eYe

+0

Что вы подразумеваете под общим? – CJK

+0

Тип библиотеки, красиво обернутый элемент управления/dll и т. Д. – eYe

0

Вы можете попробовать это один

<Button Background="Transparent" BorderThickness="0"> 
      <Image Source="Azure Automation.jpg"/> 
    </Button> 
+0

Нет изображения наведите эффект таким образом. – eYe

+0

@eYe В таком случае вам нужно написать шаблон для кнопки –

1

Здесь у вас есть: https://imagebuttonwpf.codeplex.com/releases/view/70356

Вам нужно будет скачать код, скомпилировать его, а затем использовать сгенерированную DLL в вашем проекте.

Проверьте код, это довольно легко сделать, и следуя инструкциям CJK для фактического контроля, вы могли бы сделать это сами в кратчайшие сроки!

+0

Говорит, что «проект еще не опубликован», когда я нажимаю ссылку – eYe

+0

Правда, не могу опубликовать его, не загружая код ... Mpf! Я попытаюсь найти другое место, чтобы загрузить его:/ – almulo

+0

Хорошо, не зря, я нашел другой элемент управления, сделанный другими людьми, там, в Codeplex ... Обновление моего ответа. – almulo

Смежные вопросы