UWP - PivotItem 鼠标悬停改变颜色
UWP - PivotItem mouse over change color
我想在 UWP 鼠标结束时更改 PivotItem Header 的前景颜色,我使用 windows 10
我试过这段代码:
<Page.Resources>
<SolidColorBrush x:Key="mouseOverColor"
Color="Red" />
</Page.Resources>
<Pivot HeaderTemplate="{StaticResource HeaderTemp}" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="10,0,10,0">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="Icon.(RelativePanel.AlignHorizontalCenterWithPanel)" Value="True" />
<Setter Target="LabelText.(RelativePanel.Below)" Value="Icon" />
<Setter Target="LabelText.(RelativePanel.AlignHorizontalCenterWith)" Value="Icon" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="500" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="Icon.(RelativePanel.AlignVerticalCenterWithPanel)" Value="True" />
<Setter Target="LabelText.(RelativePanel.RightOf)" Value="Icon" />
<Setter Target="LabelText.(RelativePanel.AlignVerticalCenterWith)" Value="Icon" />
<Setter Target="RelativePanel.Margin" Value="0,0,12,0"/>
<Setter Target="Icon.Margin" Value="0,0,0,0"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Pivot.Resources>
<Style x:Key="myStyle" TargetType="PivotItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="PivotItem">
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="{StaticResource mouseOverColor}" />
</Trigger>
</ControlTemplate.Triggers>
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Pivot.Resources>
<PivotItem Header="/images/img.png" Margin="12,10,12,0" >
<Grid>
.....
</Grid>
</PivotItem>
我有一个错误 "The attachable property "Triggers" 未在 'ControlTemplate' 类型中找到
你知道当鼠标悬停在通用应用程序中时如何更改图像的颜色吗
感谢帮助
你想改变图片的颜色,我觉得在XAML设计器里做不到,你可以这样做:
XAML代码:
<Pivot>
<PivotItem>
<PivotItem.Header>
<Image x:Name="headerimg" Source="Assets/1.jpg" PointerEntered="pointerEntered" PointerExited="pointerExited"/>
</PivotItem.Header>
</PivotItem>
</Pivot>
.cs 文件中的关键代码:
private async void pointerEntered(object sender, PointerRoutedEventArgs e)
{
StorageFile imgFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets\1.jpg"));
using(IRandomAccessStream streamIn = await imgFile.OpenReadAsync())
{
//decoder the img
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(BitmapDecoder.JpegDecoderId, streamIn);
//get pixel
PixelDataProvider proved = await decoder.GetPixelDataAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, new BitmapTransform(),
ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage);
byte[] srcData = proved.DetachPixelData();
// GRAYSCALE
for (int i = 0; i < srcData.Length; i += 4)
{
double b = srcData[i]; //B
double g = srcData[i + 1]; //G
double r = srcData[i + 2]; //R
//average
double v = (r + g + b) / 3d;
//replace old rgb
srcData[i] = srcData[i + 1] = srcData[i + 2] = Convert.ToByte(v);
}
WriteableBitmap wbimg = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
srcData.CopyTo(wbimg.PixelBuffer);
this.headerimg.Source = wbimg;
}
}
private async void pointerExited(object sender, PointerRoutedEventArgs e)
{
StorageFile imgFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets\1.jpg"));
IRandomAccessStream streamIn = await imgFile.OpenReadAsync();
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(streamIn);
this.headerimg.Source = bitmap;
}
要更改图像的颜色,您需要解码此图像,获取其 RGB
值,重写这些值并将它们转回图像。 Image
控件没有 Foreground
属性。
我想在 UWP 鼠标结束时更改 PivotItem Header 的前景颜色,我使用 windows 10
我试过这段代码:
<Page.Resources>
<SolidColorBrush x:Key="mouseOverColor"
Color="Red" />
</Page.Resources>
<Pivot HeaderTemplate="{StaticResource HeaderTemp}" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="10,0,10,0">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="Icon.(RelativePanel.AlignHorizontalCenterWithPanel)" Value="True" />
<Setter Target="LabelText.(RelativePanel.Below)" Value="Icon" />
<Setter Target="LabelText.(RelativePanel.AlignHorizontalCenterWith)" Value="Icon" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="500" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="Icon.(RelativePanel.AlignVerticalCenterWithPanel)" Value="True" />
<Setter Target="LabelText.(RelativePanel.RightOf)" Value="Icon" />
<Setter Target="LabelText.(RelativePanel.AlignVerticalCenterWith)" Value="Icon" />
<Setter Target="RelativePanel.Margin" Value="0,0,12,0"/>
<Setter Target="Icon.Margin" Value="0,0,0,0"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Pivot.Resources>
<Style x:Key="myStyle" TargetType="PivotItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="PivotItem">
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="{StaticResource mouseOverColor}" />
</Trigger>
</ControlTemplate.Triggers>
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Pivot.Resources>
<PivotItem Header="/images/img.png" Margin="12,10,12,0" >
<Grid>
.....
</Grid>
</PivotItem>
我有一个错误 "The attachable property "Triggers" 未在 'ControlTemplate' 类型中找到 你知道当鼠标悬停在通用应用程序中时如何更改图像的颜色吗 感谢帮助
你想改变图片的颜色,我觉得在XAML设计器里做不到,你可以这样做:
XAML代码:
<Pivot>
<PivotItem>
<PivotItem.Header>
<Image x:Name="headerimg" Source="Assets/1.jpg" PointerEntered="pointerEntered" PointerExited="pointerExited"/>
</PivotItem.Header>
</PivotItem>
</Pivot>
.cs 文件中的关键代码:
private async void pointerEntered(object sender, PointerRoutedEventArgs e)
{
StorageFile imgFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets\1.jpg"));
using(IRandomAccessStream streamIn = await imgFile.OpenReadAsync())
{
//decoder the img
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(BitmapDecoder.JpegDecoderId, streamIn);
//get pixel
PixelDataProvider proved = await decoder.GetPixelDataAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, new BitmapTransform(),
ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage);
byte[] srcData = proved.DetachPixelData();
// GRAYSCALE
for (int i = 0; i < srcData.Length; i += 4)
{
double b = srcData[i]; //B
double g = srcData[i + 1]; //G
double r = srcData[i + 2]; //R
//average
double v = (r + g + b) / 3d;
//replace old rgb
srcData[i] = srcData[i + 1] = srcData[i + 2] = Convert.ToByte(v);
}
WriteableBitmap wbimg = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
srcData.CopyTo(wbimg.PixelBuffer);
this.headerimg.Source = wbimg;
}
}
private async void pointerExited(object sender, PointerRoutedEventArgs e)
{
StorageFile imgFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets\1.jpg"));
IRandomAccessStream streamIn = await imgFile.OpenReadAsync();
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(streamIn);
this.headerimg.Source = bitmap;
}
要更改图像的颜色,您需要解码此图像,获取其 RGB
值,重写这些值并将它们转回图像。 Image
控件没有 Foreground
属性。