Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2013, 22:23   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Image Hover и Cropped Image

Здравствуйте, помогите пожалуйста разобраться с некоторым моментом. Есть картинка, на которой изображены несколько изображений, в моем случае это две кнопке для события OnMouseHover. Сделать это с двумя разными картинками проблем не составляет но в моем случае мне сначала нужно так сказать вырезать кусок картинки и подставить в свойство source при событие IsMouseOver но у меня пока это не совсем получилось. Буду благодарен за любую помощь, спасибо.

Код:
		
<Button.Resources>
 <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
  <Setter Property="Template">
   <Setter.Value>
    <ControlTemplate TargetType="{x:Type Button}">	
     <Image>
      <Image.Source>
       <CroppedBitmap x:Name="CropAcPlay" Source="{StaticResource audio_icons}" SourceRect="0 50 18 13"/>
      </Image.Source>												
     <Image.Style>
    <Style TargetType="{x:Type Image}">
   <Setter Property="Image.Source" Value="/VK;component/Resources/ad_video_play.png"/>
  <Style.Triggers>
  <Trigger Property="Image.IsMouseOver" Value="True">														
  <Setter Property="Image.Source"
Value="/VK;component/Resources/VKontakte.png"/>
 </Trigger>
</Style.Triggers>
....

Последний раз редактировалось coNsept; 23.04.2013 в 22:26.
coNsept вне форума Ответить с цитированием
Старый 23.04.2013, 23:49   #2
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Если для кого пригодится, решением данной задачи является использование "конвертера".
В "Value="/VK;component/Resources/ad_video_play.png"/>" подставляется Converter.
Объявляем локальный xmlns указывающий на директорию вашего конвертера (класс содержащий операции так скажем преобразования): xmlns:l="clr-namespace:VK.Converters"
Где-то в ресурсах окна объявляем этот класс с ключиком: <l:CropImageToValueConverter x:Key="VkCropImgToValueKey"/>

Код:
<Setter Property="Image.Source">
 <Setter.Value>
  <Binding Converter="{StaticResource VkCropImgToValueKey}" />
 </Setter.Value>
</Setter>
А вот как-то так выглядит класс конвертер.

Код:
public class CropImageToValueConverter : IValueConverter
{
 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 {
  string path = "/VK;component/Resources/ad_video_play.png";

  //Crop image
  
  return path.ToString(CultureInfo.InvariantCulture);
 }

 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 {
  throw new NotImplementedException();
 }
}
coNsept вне форума Ответить с цитированием
Старый 24.04.2013, 09:41   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

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

Код:
namespace VK.Converters
{
    /// <summary>
    /// 
    /// </summary>
    public class ImageToValueOnMouseEnterConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            const string path = "pack://application:,,,/Resources/audio_icons.png";
            var bitmapSource = new BitmapImage(new Uri(path, UriKind.RelativeOrAbsolute));

            //if (parameter != null)
            //{
            var rectangle = parameter.ToString().Split(' ');

            var x = int.Parse(rectangle[0]);
            var y = int.Parse(rectangle[1]);
            var width = int.Parse(rectangle[2]);
            var height = int.Parse(rectangle[3]);

            return new CroppedBitmap(bitmapSource, new Int32Rect(x, y, width, height));
            //}

            // return new CroppedBitmap(bitmapSource, new Int32Rect(0, 24, 24, 24));
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

Код:
	<Button x:Name="ButtonBlue" Content="Button" HorizontalAlignment="Right" Style="{DynamicResource ButtonStyle1}" Width="125">
						<Button.Resources>
							<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
								<Setter Property="Template">
									<Setter.Value>
										<ControlTemplate TargetType="{x:Type Button}">
											<ControlTemplate.Resources>
												<Storyboard x:Key="Storyboard1"/>
											</ControlTemplate.Resources>
											<Grid>
												<Border x:Name="ButtonBlue" BorderBrush="#FF4D6C8B" BorderThickness="0.5">
													<Border.Background>
														<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
															<GradientStop Color="#FF5A81AB" Offset="0.004"/>
															<GradientStop Color="#FF5B7CA0" Offset="1"/>
														</LinearGradientBrush>
													</Border.Background>
													<Grid Height="Auto" Width="Auto" Margin="-1">
														<TextBlock TextWrapping="Wrap" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="11" Width="88.333" Margin="13,-2,0,0" Text="по композициям"/>
														<Image Margin="0,0,3.667,0" HorizontalAlignment="Right" Width="21" Height="Auto" Source="/VK;component/Resources/wide_dd.gif"/>
													</Grid>
												</Border>
											</Grid>
											<ControlTemplate.Triggers>
												<Trigger Property="IsFocused" Value="True"/>
												<Trigger Property="IsDefaulted" Value="True"/>
												<Trigger Property="IsMouseOver" Value="True">
													<Setter Property="Background" TargetName="ButtonBlue">
														<Setter.Value>
															<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
																<GradientStop Color="#FF658FBC"/>
																<GradientStop Color="#FF5B7CA0" Offset="1"/>
															</LinearGradientBrush>
														</Setter.Value>
													</Setter>
												</Trigger>
												<Trigger Property="IsPressed" Value="True"/>
												<Trigger Property="IsEnabled" Value="False"/>
											</ControlTemplate.Triggers>
										</ControlTemplate>
									</Setter.Value>
								</Setter>
							</Style>
						</Button.Resources>
					</Button>
coNsept вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При столкновении между image переместить другой Image Алексей_2012 Общие вопросы Delphi 1 07.03.2013 09:32
Плавно убрать Image или Image+AlphaBlend ViniPux1112 Мультимедиа в Delphi 1 10.12.2012 23:55
css :hover background-image Fandr4 HTML и CSS 1 05.01.2011 22:01
EPNGMissingMultipleIDAT. This PNG Image is invalid because it has missing image parts kardinal94 Общие вопросы Delphi 0 08.10.2010 20:31
Вопрос по Image (скачанная картинка не хочет выводиться в Image) Radnor Мультимедиа в Delphi 2 06.07.2009 02:20