🎉 添加新手引导提示
This commit is contained in:
@@ -54,10 +54,81 @@
|
|||||||
</Window.CommandBindings>
|
</Window.CommandBindings>
|
||||||
|
|
||||||
<!--Opacity="{Binding AppConfig.PannelOpacity, Mode=TwoWay, Converter={StaticResource OpcityConvert}}"-->
|
<!--Opacity="{Binding AppConfig.PannelOpacity, Mode=TwoWay, Converter={StaticResource OpcityConvert}}"-->
|
||||||
|
<Grid>
|
||||||
|
<!--遮罩层border 用于引导提示-->
|
||||||
|
<Border Margin="20"
|
||||||
|
MouseDown="DragMove"
|
||||||
|
CornerRadius="{Binding AppConfig.PannelCornerRadius, Mode=OneWay, Converter={StaticResource IntToCornerRadius}}"
|
||||||
|
BorderThickness="0"
|
||||||
|
x:Name="GrayBorder"
|
||||||
|
Panel.ZIndex="888"
|
||||||
|
>
|
||||||
|
<Border.Background>
|
||||||
|
<SolidColorBrush Color="Gray" Opacity="0.8"/>
|
||||||
|
</Border.Background>
|
||||||
|
|
||||||
|
<!--<hc:Poptip.Instance>
|
||||||
|
<hc:Poptip PlacementType="Top" IsOpen="False" HitMode="None">
|
||||||
|
<hc:Poptip.ContentTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Border Background="White" Width="300" Height="150">
|
||||||
|
<TextBlock Text="这是一个测测试"/>
|
||||||
|
</Border>
|
||||||
|
</DataTemplate>
|
||||||
|
</hc:Poptip.ContentTemplate>
|
||||||
|
</hc:Poptip>
|
||||||
|
</hc:Poptip.Instance>-->
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
<hc:Card x:Name="GuideCard" Width="300" Height="150" Panel.ZIndex="888"
|
||||||
|
VerticalAlignment="Top"
|
||||||
|
HorizontalAlignment="Left">
|
||||||
|
<!--Card 的内容部分-->
|
||||||
|
<Border CornerRadius="4,4,0,0" Width="300" Height="100">
|
||||||
|
<TextBlock TextWrapping="Wrap"
|
||||||
|
x:Name="GuideText"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
FontSize="14"
|
||||||
|
Text="将文件拖动到这里自动创建快捷方式, 或者鼠标右键单击添加系统项目"/>
|
||||||
|
</Border>
|
||||||
|
<!--Card 的尾部部分-->
|
||||||
|
<hc:Card.Footer>
|
||||||
|
<Grid>
|
||||||
|
<StackPanel Margin="10" Width="150" Height="50" HorizontalAlignment="Left">
|
||||||
|
<!--Card 的一级内容-->
|
||||||
|
<TextBlock TextWrapping="Wrap"
|
||||||
|
x:Name="GuideTitle1"
|
||||||
|
Style="{DynamicResource TextBlockLargeBold}"
|
||||||
|
TextTrimming="CharacterEllipsis"
|
||||||
|
Text="引导1"
|
||||||
|
FontSize="20"
|
||||||
|
HorizontalAlignment="Left"/>
|
||||||
|
<!--Card 的二级内容-->
|
||||||
|
<TextBlock TextWrapping="NoWrap"
|
||||||
|
x:Name="GuideTitle2"
|
||||||
|
Style="{DynamicResource TextBlockDefault}"
|
||||||
|
TextTrimming="CharacterEllipsis"
|
||||||
|
Text="快捷方式创建"
|
||||||
|
Margin="0,6,0,0"
|
||||||
|
FontSize="14"
|
||||||
|
HorizontalAlignment="Left"/>
|
||||||
|
</StackPanel>
|
||||||
|
<hc:UniformSpacingPanel HorizontalAlignment="Right">
|
||||||
|
<Button x:Name="PreviewGuideBtn" Click="PreviewGuideBtn_Click" Margin="0,0,20,0" Content="上一步"/>
|
||||||
|
<Button x:Name="NextGuideBtn" Click="NextGuideBtn_Click" Margin="0,0,20,0" Content="下一步"/>
|
||||||
|
</hc:UniformSpacingPanel>
|
||||||
|
</Grid>
|
||||||
|
</hc:Card.Footer>
|
||||||
|
</hc:Card>
|
||||||
|
|
||||||
|
|
||||||
<Border Margin="20" CornerRadius="{Binding AppConfig.PannelCornerRadius, Mode=TwoWay, Converter={StaticResource IntToCornerRadius}}"
|
<Border Margin="20" CornerRadius="{Binding AppConfig.PannelCornerRadius, Mode=TwoWay, Converter={StaticResource IntToCornerRadius}}"
|
||||||
BorderThickness="0"
|
BorderThickness="0"
|
||||||
Focusable="True"
|
Focusable="True"
|
||||||
|
Panel.ZIndex="1"
|
||||||
x:Name="BGBorder"
|
x:Name="BGBorder"
|
||||||
|
Background="AliceBlue"
|
||||||
hc:Dialog.Token="MainWindowDialog"
|
hc:Dialog.Token="MainWindowDialog"
|
||||||
xf:Animations.Primary="{xf:Animate BasedOn={StaticResource FadeInAndGrowHorizontally}, Event=None}"
|
xf:Animations.Primary="{xf:Animate BasedOn={StaticResource FadeInAndGrowHorizontally}, Event=None}"
|
||||||
xf:Animations.PrimaryBinding="{Binding AppConfig.IsShow, Mode=OneWay}"
|
xf:Animations.PrimaryBinding="{Binding AppConfig.IsShow, Mode=OneWay}"
|
||||||
@@ -75,7 +146,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="40" MouseMove="DragMove"></RowDefinition>
|
<RowDefinition Height="40" MouseDown="DragMove"></RowDefinition>
|
||||||
<RowDefinition Height="*"></RowDefinition>
|
<RowDefinition Height="*"></RowDefinition>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
@@ -92,14 +163,14 @@
|
|||||||
<StackPanel HorizontalAlignment="Right" Panel.ZIndex="99" hc:Growl.GrowlParent="False" hc:Growl.Token="MainWindowGrowl" Grid.Column="1" Grid.Row="1"/>
|
<StackPanel HorizontalAlignment="Right" Panel.ZIndex="99" hc:Growl.GrowlParent="False" hc:Growl.Token="MainWindowGrowl" Grid.Column="1" Grid.Row="1"/>
|
||||||
<StackPanel HorizontalAlignment="Center" Panel.ZIndex="99" hc:Growl.GrowlParent="False" hc:Growl.Token="MainWindowAskGrowl" Grid.Column="1" Grid.Row="1"/>
|
<StackPanel HorizontalAlignment="Center" Panel.ZIndex="99" hc:Growl.GrowlParent="False" hc:Growl.Token="MainWindowAskGrowl" Grid.Column="1" Grid.Row="1"/>
|
||||||
|
|
||||||
<DockPanel Grid.Row="0" Grid.Column="0" MouseMove="DragMove">
|
<DockPanel Grid.Row="0" Grid.Column="0" MouseDown="DragMove">
|
||||||
<DockPanel.Background>
|
<DockPanel.Background>
|
||||||
<SolidColorBrush Opacity="0.01"/>
|
<SolidColorBrush Opacity="0.01"/>
|
||||||
</DockPanel.Background>
|
</DockPanel.Background>
|
||||||
<Image Visibility="{Binding AppConfig.TitleLogoVisible}" Source="/Resource/Image/TitleLogo.png" RenderOptions.BitmapScalingMode="HighQuality" Margin="10,0,0,0" Width="200" Height="30" HorizontalAlignment="Left"/>
|
<Image Visibility="{Binding AppConfig.TitleLogoVisible}" Source="/Resource/Image/TitleLogo.png" RenderOptions.BitmapScalingMode="HighQuality" Margin="10,0,0,0" Width="200" Height="30" HorizontalAlignment="Left"/>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|
||||||
<DockPanel Grid.Row="0" Grid.Column="2" MouseMove="DragMove">
|
<DockPanel Grid.Row="0" Grid.Column="2" MouseDown="DragMove">
|
||||||
<DockPanel.Background>
|
<DockPanel.Background>
|
||||||
<SolidColorBrush Opacity="0.01"/>
|
<SolidColorBrush Opacity="0.01"/>
|
||||||
</DockPanel.Background>
|
</DockPanel.Background>
|
||||||
@@ -212,4 +283,6 @@
|
|||||||
</hc:DialogContainer>
|
</hc:DialogContainer>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
</Window>
|
</Window>
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ using ShowSeconds;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@@ -24,8 +25,10 @@ using System.Windows;
|
|||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Interop;
|
using System.Windows.Interop;
|
||||||
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Animation;
|
using System.Windows.Media.Animation;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Media.Media3D;
|
||||||
using System.Windows.Shell;
|
using System.Windows.Shell;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using static GeekDesk.Util.ShowWindowFollowMouse;
|
using static GeekDesk.Util.ShowWindowFollowMouse;
|
||||||
@@ -50,7 +53,6 @@ namespace GeekDesk
|
|||||||
//加载数据
|
//加载数据
|
||||||
LoadData();
|
LoadData();
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
//用于其他类访问
|
//用于其他类访问
|
||||||
mainWindow = this;
|
mainWindow = this;
|
||||||
|
|
||||||
@@ -355,8 +357,13 @@ namespace GeekDesk
|
|||||||
Keyboard.Focus(SearchBox);
|
Keyboard.Focus(SearchBox);
|
||||||
|
|
||||||
MessageUtil.ChangeWindowMessageFilter(MessageUtil.WM_COPYDATA, 1);
|
MessageUtil.ChangeWindowMessageFilter(MessageUtil.WM_COPYDATA, 1);
|
||||||
|
|
||||||
|
|
||||||
|
Guide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 注册当前窗口的热键
|
/// 注册当前窗口的热键
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -497,28 +504,9 @@ namespace GeekDesk
|
|||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void DragMove(object sender, MouseEventArgs e)
|
private void DragMove(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (e.LeftButton == MouseButtonState.Pressed)
|
if (e.LeftButton == MouseButtonState.Pressed)
|
||||||
{
|
{
|
||||||
var windowMode = this.ResizeMode;
|
|
||||||
if (this.ResizeMode != ResizeMode.NoResize)
|
|
||||||
{
|
|
||||||
this.ResizeMode = ResizeMode.NoResize;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.UpdateLayout();
|
|
||||||
|
|
||||||
|
|
||||||
/* 当点击拖拽区域的时候,让窗口跟着移动
|
|
||||||
(When clicking the drag area, make the window follow) */
|
|
||||||
DragMove();
|
DragMove();
|
||||||
|
|
||||||
if (this.ResizeMode != windowMode)
|
|
||||||
{
|
|
||||||
this.ResizeMode = windowMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.UpdateLayout();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1028,5 +1016,133 @@ namespace GeekDesk
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class GuideInfo
|
||||||
|
{
|
||||||
|
private string title1;
|
||||||
|
private string title2;
|
||||||
|
private string guideText;
|
||||||
|
|
||||||
|
public string Title1 { get; set; }
|
||||||
|
public string Title2 { get; set; }
|
||||||
|
public string GuideText { get; set; }
|
||||||
|
}
|
||||||
|
enum GuidePopOffect
|
||||||
|
{
|
||||||
|
TOP,
|
||||||
|
INNER_TOP,
|
||||||
|
LEFT,
|
||||||
|
INNER_LEFT,
|
||||||
|
CENTER,
|
||||||
|
RIGHT,
|
||||||
|
INNER_RIGHT,
|
||||||
|
BOTTOM,
|
||||||
|
INNER_BOTTOM
|
||||||
|
}
|
||||||
|
|
||||||
|
private ObservableCollection<GuideInfo> list = new ObservableCollection<GuideInfo>();
|
||||||
|
|
||||||
|
private void Guide()
|
||||||
|
{
|
||||||
|
|
||||||
|
GuideInfo guideInfo = new GuideInfo
|
||||||
|
{
|
||||||
|
Title1 = "提示1",
|
||||||
|
Title2 = "快捷方式创建",
|
||||||
|
GuideText = "将文件拖动到这里自动创建快捷方式, 或者鼠标右键单击添加系统项目"
|
||||||
|
};
|
||||||
|
list.Add(guideInfo);
|
||||||
|
|
||||||
|
guideInfo = new GuideInfo
|
||||||
|
{
|
||||||
|
Title1 = "提示2",
|
||||||
|
Title2 = "快捷方式创建",
|
||||||
|
GuideText = "将文件拖动到这里自动创建快捷方式, 或者鼠标右键单击添加系统项目"
|
||||||
|
};
|
||||||
|
list.Add(guideInfo);
|
||||||
|
|
||||||
|
guideInfo = new GuideInfo
|
||||||
|
{
|
||||||
|
Title1 = "提示3",
|
||||||
|
Title2 = "快捷方式创建",
|
||||||
|
GuideText = "将文件拖动到这里自动创建快捷方式, 或者鼠标右键单击添加系统项目"
|
||||||
|
};
|
||||||
|
list.Add(guideInfo);
|
||||||
|
|
||||||
|
GrayBorder.Visibility = Visibility.Visible;
|
||||||
|
GuideSwitch(0);
|
||||||
|
GuideCard.Visibility = Visibility.Visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GuideSwitch(int num)
|
||||||
|
{
|
||||||
|
switch (num)
|
||||||
|
{
|
||||||
|
default: //0 //右侧列表区域
|
||||||
|
PreviewGuideBtn.Visibility = Visibility.Collapsed;
|
||||||
|
NextGuideBtn.Content = "下一步";
|
||||||
|
Point point = RightCard.TransformToAncestor(this).Transform(new Point(0, 0));
|
||||||
|
//内部中上
|
||||||
|
GrayBoderClip(point.X, point.Y, RightCard.ActualWidth, RightCard.ActualHeight,
|
||||||
|
new Thickness(point.X + RightCard.ActualWidth / 2 - GuideCard.ActualWidth / 2, point.Y, 0, 0));
|
||||||
|
break;
|
||||||
|
case 1: //左侧菜单
|
||||||
|
PreviewGuideBtn.Visibility = Visibility.Visible;
|
||||||
|
NextGuideBtn.Content = "下一步";
|
||||||
|
Point leftCardPoint = LeftCard.TransformToAncestor(this).Transform(new Point(0, 0));
|
||||||
|
GrayBoderClip(leftCardPoint.X , leftCardPoint.Y , LeftCard.ActualWidth, LeftCard.ActualHeight,
|
||||||
|
// 外部中下侧
|
||||||
|
new Thickness(leftCardPoint.X + LeftCard.ActualWidth,
|
||||||
|
leftCardPoint.Y + LeftCard.ActualHeight / 2 - GuideCard.ActualHeight / 2, 0, 0));
|
||||||
|
break;
|
||||||
|
case 2: //头部拖拽栏
|
||||||
|
NextGuideBtn.Content = "完成";
|
||||||
|
GrayBoderClip(0, 0, this.Width, 50,
|
||||||
|
// 外部中下侧
|
||||||
|
new Thickness(this.Width / 2 - GuideCard.ActualWidth / 2, 50, 0, 0));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void GrayBoderClip(double x, double y, double w, double h, Thickness margin)
|
||||||
|
{
|
||||||
|
PathGeometry borGeometry = new PathGeometry();
|
||||||
|
|
||||||
|
RectangleGeometry rg = new RectangleGeometry();
|
||||||
|
rg.Rect = new Rect(0, 0, this.Width, this.Height);
|
||||||
|
borGeometry = Geometry.Combine(borGeometry, rg, GeometryCombineMode.Union, null);
|
||||||
|
GrayBorder.Clip = borGeometry;
|
||||||
|
|
||||||
|
RectangleGeometry rg1 = new RectangleGeometry();
|
||||||
|
rg1.Rect = new Rect(x - 20, y - 20, w, h);
|
||||||
|
borGeometry = Geometry.Combine(borGeometry, rg1, GeometryCombineMode.Exclude, null);
|
||||||
|
GuideCard.Margin = margin;
|
||||||
|
GrayBorder.Clip = borGeometry;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PreviewGuideBtn_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
int index = Convert.ToInt32(GuideTitle1.Text.ToString().Substring(2)) - 1;
|
||||||
|
int previewIndex = index - 1;
|
||||||
|
GuideTitle1.Text = list[previewIndex].Title1;
|
||||||
|
GuideTitle2.Text = list[previewIndex].Title2;
|
||||||
|
GuideText.Text = list[previewIndex].GuideText;
|
||||||
|
GuideSwitch(previewIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void NextGuideBtn_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if ("完成".Equals(NextGuideBtn.Content.ToString())) {
|
||||||
|
GrayBorder.Visibility = Visibility.Collapsed;
|
||||||
|
GuideCard.Visibility = Visibility.Collapsed;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int index = Convert.ToInt32(GuideTitle1.Text.ToString().Substring(2)) - 1;
|
||||||
|
int nextIndex = index + 1;
|
||||||
|
GuideTitle1.Text = list[nextIndex].Title1;
|
||||||
|
GuideTitle2.Text = list[nextIndex].Title2;
|
||||||
|
GuideText.Text = list[nextIndex].GuideText;
|
||||||
|
GuideSwitch(nextIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ namespace GeekDesk.Util
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
LinearGradientBrush lgb = new LinearGradientBrush();
|
LinearGradientBrush lgb = new LinearGradientBrush();
|
||||||
lgb.Opacity = (double)(Math.Round((decimal)(appConfig.BgOpacity / 100.00), 2));
|
|
||||||
GradientStop gs = new GradientStop
|
GradientStop gs = new GradientStop
|
||||||
{
|
{
|
||||||
Color = (Color)ColorConverter.ConvertFromString(appConfig.GradientBGParam.Color1),
|
Color = (Color)ColorConverter.ConvertFromString(appConfig.GradientBGParam.Color1),
|
||||||
@@ -60,6 +59,7 @@ namespace GeekDesk.Util
|
|||||||
Offset = 1
|
Offset = 1
|
||||||
};
|
};
|
||||||
lgb.GradientStops.Add(gs2);
|
lgb.GradientStops.Add(gs2);
|
||||||
|
lgb.Opacity = (double)(Math.Round((decimal)(appConfig.BgOpacity / 100.00), 2));
|
||||||
MainWindow.mainWindow.BGBorder.Background = lgb;
|
MainWindow.mainWindow.BGBorder.Background = lgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user