2012-04-28 2 views
4

У меня проблема с кнопками в wpf. Если я перемещаю мышь над кнопкой, она становится голубым цветом по умолчанию, но у меня есть изображение в кнопке, поэтому изображение скрывается, когда мышь есть.Как включить мышь над эффектом кнопки программно?

Я видел некоторое решение для этого, но они были сделаны в коде XAML. Я создал программные кнопки, так что это не сработает. И последняя нажатая кнопка всегда мигает и, если у меня нет курсора на нее. Проблема такая же. Поэтому мне нужен код C#, а не код xaml.

Любые идеи? :)

+0

что редактируется? – Bene

+0

Отт, теги были отредактированы. – dsolimano

ответ

1

Мигающая кнопка и синий цвет подсветки являются частью стиля кнопки по умолчанию и для ее изменения вам необходимо переопределить стиль по умолчанию. Я бы предложил создать стиль в XAML, а затем назначить его программно. Вы можете получить стиль кнопки по умолчанию here, а затем посмотреть this post о том, как программировать стиль.

Update: Это, кажется, работает для меня, и вот что я сделал:

Создать кнопку проблемно в задней код и установить стиль:

public MainWindow() 
{ 
    InitializeComponent(); 

    Bitmap bitMap = new Bitmap(@"\path\to\image.png"); 
    MemoryStream ms = new MemoryStream(); 
    bitMap.Save(ms, ImageFormat.Png); 
    ms.Seek(0,SeekOrigin.Begin); 

    BitmapImage bitMapImage = new BitmapImage(); 
    bitMapImage.BeginInit(); 
    bitMapImage.StreamSource = ms; 
    bitMapImage.EndInit(); 

    Image image = new Image(); 
    image.Source = bitMapImage; 
    image.Height = 100; 

    Button button = new Button(); 
    button.Height = 200; 
    button.Width = 200; 
    button.Content = image; 
    button.Style = button.Style = (Style)FindResource("myButtonStyle"); 

    myGrid.Children.Add(button); 
} 

Создание стиля в XAML, копируя и вставляя стиль кнопки, предоставляемый Microsoft и изменяя поведение, как вы хотите. Чтобы отключить мышь от эффекта, я прокомментировал раздел <VisualState x:Name="MouseOver"> ... </VisualState>

<Style x:Key="myButtonStyle" TargetType="Button"> 
    <!-- Style copied from MSDN Button Style page --> 
    <!-- Remove or comment out <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}" /> --> 
    <!-- Remove or comment out <VisualState x:Name="MouseOver> ... </VisualState> 
    <!-- Change colors to your liking or set to Transparent to not show color --> 
    .... 
</Style> 
+0

ОК. Я пробовал ваше решение, но оно не делает то, что я хочу. Стиль текста изменяется в кнопке, но он становится тем же самым голубым цветом, когда курсор над ним. Поэтому мое изображение не отображается. – Bene