27 files changed
+767
-97
No files matched your search
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
@@ -19,6 +19,14 @@
|
|||||||
<PackageReference Include="MvvmLightLibs" Version="5.4.1.1" />
|
<PackageReference Include="MvvmLightLibs" Version="5.4.1.1" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
|
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.Designer.cs">
|
||||||
|
<Link>Properties\Langs\Lang.Designer.cs</Link>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Lang.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Remove="Properties\AssemblyInfo.cs" />
|
<Compile Remove="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Remove="Properties\Langs\Lang.en.Designer.cs" />
|
<Compile Remove="Properties\Langs\Lang.en.Designer.cs" />
|
||||||
@@ -305,5 +313,15 @@
|
|||||||
<Link>Resources\Img\under_construction.gif</Link>
|
<Link>Resources\Img\under_construction.gif</Link>
|
||||||
</Resource>
|
</Resource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.en.resx">
|
||||||
|
<Link>Properties\Langs\Lang.en.resx</Link>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.resx">
|
||||||
|
<Link>Properties\Langs\Lang.resx</Link>
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Lang.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="..\..\Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems" Label="Shared" />
|
<Import Project="..\..\Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems" Label="Shared" />
|
||||||
</Project>
|
</Project>
|
||||||
@@ -16,6 +16,24 @@
|
|||||||
<DefineConstants>TRACE;Core</DefineConstants>
|
<DefineConstants>TRACE;Core</DefineConstants>
|
||||||
<DocumentationFile>C:\Code\GitHub\HandyControl\src\Core_30\HandyControl_Core_30\HandyControl.xml</DocumentationFile>
|
<DocumentationFile>C:\Code\GitHub\HandyControl\src\Core_30\HandyControl_Core_30\HandyControl.xml</DocumentationFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.Designer.cs">
|
||||||
|
<Link>Properties\Langs\Lang.Designer.cs</Link>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Lang.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.en.resx">
|
||||||
|
<Link>Properties\Langs\Lang.en.resx</Link>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.resx">
|
||||||
|
<Link>Properties\Langs\Lang.resx</Link>
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Lang.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
|
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="Themes\Styles\Base\TreeViewBaseStyle.xaml" />
|
<None Remove="Themes\Styles\Base\TreeViewBaseStyle.xaml" />
|
||||||
|
|||||||
@@ -73,6 +73,14 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.Designer.cs">
|
||||||
|
<Link>Properties\Langs\Lang.Designer.cs</Link>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Lang.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\1.jpg">
|
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\1.jpg">
|
||||||
<Link>Resources\Img\1.jpg</Link>
|
<Link>Resources\Img\1.jpg</Link>
|
||||||
@@ -357,6 +365,16 @@
|
|||||||
<Name>HandyControl_Net_40</Name>
|
<Name>HandyControl_Net_40</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.en.resx">
|
||||||
|
<Link>Properties\Langs\Lang.en.resx</Link>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.resx">
|
||||||
|
<Link>Properties\Langs\Lang.resx</Link>
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Lang.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="..\..\Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems" Label="Shared" />
|
<Import Project="..\..\Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems" Label="Shared" />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
@@ -34,6 +34,14 @@
|
|||||||
<DocumentationFile>bin\Release\HandyControl.xml</DocumentationFile>
|
<DocumentationFile>bin\Release\HandyControl.xml</DocumentationFile>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.Designer.cs">
|
||||||
|
<Link>Properties\Langs\Lang.Designer.cs</Link>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Lang.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
<Reference Include="PresentationFramework" />
|
<Reference Include="PresentationFramework" />
|
||||||
@@ -79,6 +87,16 @@
|
|||||||
<Version>3.0.1</Version>
|
<Version>3.0.1</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.en.resx">
|
||||||
|
<Link>Properties\Langs\Lang.en.resx</Link>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.resx">
|
||||||
|
<Link>Properties\Langs\Lang.resx</Link>
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Lang.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
|
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
@@ -106,7 +106,6 @@
|
|||||||
<Setter Property="controls:ScrollViewer.IsEnableInertia" Value="False"/>
|
<Setter Property="controls:ScrollViewer.IsEnableInertia" Value="False"/>
|
||||||
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
|
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
|
||||||
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||||||
<Setter Property="VirtualizingPanel.IsVirtualizing" Value="True"/>
|
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="TreeView">
|
<ControlTemplate TargetType="TreeView">
|
||||||
@@ -119,24 +118,10 @@
|
|||||||
<Trigger Property="IsEnabled" Value="false">
|
<Trigger Property="IsEnabled" Value="false">
|
||||||
<Setter Property="Background" TargetName="Bd" Value="{StaticResource {x:Static SystemColors.ControlBrushKey}}"/>
|
<Setter Property="Background" TargetName="Bd" Value="{StaticResource {x:Static SystemColors.ControlBrushKey}}"/>
|
||||||
</Trigger>
|
</Trigger>
|
||||||
<!--<Trigger Property="VirtualizingPanel.IsVirtualizing" Value="true">
|
|
||||||
<Setter Property="CanContentScroll" TargetName="_tv_scrollviewer_" Value="true"/>
|
|
||||||
</Trigger>-->
|
|
||||||
</ControlTemplate.Triggers>
|
</ControlTemplate.Triggers>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter.Value>
|
</Setter.Value>
|
||||||
</Setter>
|
</Setter>
|
||||||
<!--<Style.Triggers>
|
|
||||||
<Trigger Property="VirtualizingPanel.IsVirtualizing" Value="true">
|
|
||||||
<Setter Property="ItemsPanel">
|
|
||||||
<Setter.Value>
|
|
||||||
<ItemsPanelTemplate>
|
|
||||||
<VirtualizingStackPanel/>
|
|
||||||
</ItemsPanelTemplate>
|
|
||||||
</Setter.Value>
|
|
||||||
</Setter>
|
|
||||||
</Trigger>
|
|
||||||
</Style.Triggers>-->
|
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -2,7 +2,8 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:controls="clr-namespace:HandyControl.Controls"
|
xmlns:controls="clr-namespace:HandyControl.Controls"
|
||||||
xmlns:langs="clr-namespace:HandyControl.Properties.Langs"
|
xmlns:langs="clr-namespace:HandyControl.Properties.Langs"
|
||||||
xmlns:interactivity="clr-namespace:HandyControl.Interactivity">
|
xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
|
||||||
|
xmlns:shell="http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell">
|
||||||
|
|
||||||
<ResourceDictionary.MergedDictionaries>
|
<ResourceDictionary.MergedDictionaries>
|
||||||
<ResourceDictionary Source="Window.xaml"/>
|
<ResourceDictionary Source="Window.xaml"/>
|
||||||
@@ -17,28 +18,105 @@
|
|||||||
<Setter Property="BorderThickness" Value="1"/>
|
<Setter Property="BorderThickness" Value="1"/>
|
||||||
<Setter Property="ResizeMode" Value="NoResize"/>
|
<Setter Property="ResizeMode" Value="NoResize"/>
|
||||||
<Setter Property="SizeToContent" Value="WidthAndHeight"/>
|
<Setter Property="SizeToContent" Value="WidthAndHeight"/>
|
||||||
<Setter Property="Content">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<Grid>
|
<ControlTemplate TargetType="controls:MessageBox">
|
||||||
<Grid.ColumnDefinitions>
|
<Border SnapsToDevicePixels="True" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}">
|
||||||
<ColumnDefinition Width="Auto"/>
|
<Grid Margin="{TemplateBinding Padding}">
|
||||||
<ColumnDefinition/>
|
<Grid.RowDefinitions>
|
||||||
</Grid.ColumnDefinitions>
|
<RowDefinition Height="Auto"/>
|
||||||
<Grid.RowDefinitions>
|
<RowDefinition/>
|
||||||
<RowDefinition/>
|
</Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto"/>
|
<Grid Background="{TemplateBinding NonClientAreaBackground}" Name="PART_NonClientArea" TextElement.Foreground="{TemplateBinding NonClientAreaForeground}">
|
||||||
</Grid.RowDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<Path x:Name="PART_Image" HorizontalAlignment="Center" Visibility="Collapsed" Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" Margin="20,32,0,0" Width="30" Height="30" Stretch="Uniform"/>
|
<ColumnDefinition/>
|
||||||
<ScrollViewer Grid.Column="1" Grid.Row="0">
|
<ColumnDefinition Width="Auto"/>
|
||||||
<TextBlock Margin="10,39,10,10" x:Name="PART_Message" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
</Grid.ColumnDefinitions>
|
||||||
</ScrollViewer>
|
<StackPanel shell:WindowChrome.IsHitTestVisibleInChrome="True" UseLayoutRounding="True" VerticalAlignment="Top" Grid.Column="1" HorizontalAlignment="Right" Orientation="Horizontal">
|
||||||
<StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Margin="0,10,0,16" Orientation="Horizontal" Background="{DynamicResource RegionBrush}" HorizontalAlignment="Center">
|
<Button Background="{TemplateBinding OtherButtonBackground}" Foreground="{TemplateBinding OtherButtonForeground}" Command="shell:SystemCommands.MinimizeWindowCommand" IsTabStop="False" Name="ButtonMin" Height="29" Style="{StaticResource ButtonIcon}" Width="45" controls:IconElement.Geometry="{StaticResource WindowMinGeometry}" BorderThickness="1,0,1,0" controls:IconElement.Width="10" controls:IconElement.Height="10"/>
|
||||||
<Button Visibility="{Binding IsEnabled,RelativeSource={RelativeSource Self},Converter={StaticResource Boolean2VisibilityConverter}}" IsCancel="True" MinWidth="88" Command="interactivity:ControlCommands.Cancel" Content="{x:Static langs:Lang.Cancel}" Margin="5,0"/>
|
<Button Background="{TemplateBinding OtherButtonBackground}" Foreground="{TemplateBinding OtherButtonForeground}" Command="shell:SystemCommands.MaximizeWindowCommand" IsTabStop="False" Name="ButtonMax" Height="29" Style="{StaticResource ButtonIcon}" Width="46" controls:IconElement.Geometry="{StaticResource WindowMaxGeometry}" BorderThickness="1,0,1,0" controls:IconElement.Width="10" controls:IconElement.Height="10"/>
|
||||||
<Button Visibility="{Binding IsEnabled,RelativeSource={RelativeSource Self},Converter={StaticResource Boolean2VisibilityConverter}}" IsDefault="True" MinWidth="88" Command="interactivity:ControlCommands.Confirm" Content="{x:Static langs:Lang.Confirm}" Margin="5,0" Style="{StaticResource ButtonPrimary}"/>
|
<Button Background="{TemplateBinding OtherButtonBackground}" Foreground="{TemplateBinding OtherButtonForeground}" Command="shell:SystemCommands.RestoreWindowCommand" IsTabStop="False" Name="ButtonRestore" Height="29" Style="{StaticResource ButtonIcon}" Width="46" controls:IconElement.Geometry="{StaticResource WindowRestoreGeometry}" BorderThickness="1,0,1,0" controls:IconElement.Width="10" controls:IconElement.Height="10"/>
|
||||||
<Button Visibility="{Binding IsEnabled,RelativeSource={RelativeSource Self},Converter={StaticResource Boolean2VisibilityConverter}}" IsCancel="True" MinWidth="88" Command="interactivity:ControlCommands.No" Content="{x:Static langs:Lang.No}" Margin="5,0"/>
|
<Button Background="{TemplateBinding CloseButtonBackground}" Foreground="{TemplateBinding CloseButtonForeground}" Command="shell:SystemCommands.CloseWindowCommand" IsTabStop="False" Name="ButtonClose" Height="29" Style="{StaticResource ButtonIcon}" Width="46" controls:IconElement.Geometry="{StaticResource CloseGeometry}" BorderThickness="1,0,0,0" controls:IconElement.Width="10" controls:IconElement.Height="10"/>
|
||||||
<Button Visibility="{Binding IsEnabled,RelativeSource={RelativeSource Self},Converter={StaticResource Boolean2VisibilityConverter}}" IsDefault="True" MinWidth="88" Command="interactivity:ControlCommands.Yes" Content="{x:Static langs:Lang.Yes}" Margin="5,0" Style="{StaticResource ButtonPrimary}"/>
|
</StackPanel>
|
||||||
</StackPanel>
|
<Grid Grid.Column="0">
|
||||||
</Grid>
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Image Name="Icon" Margin="10,0,0,0" Source="{TemplateBinding Icon}" VerticalAlignment="Center" Width="16" Height="16"/>
|
||||||
|
<TextBlock Name="Title" Grid.Column="1" Text="{TemplateBinding Title}" Padding="10,0,0,0" VerticalAlignment="Center"/>
|
||||||
|
<ContentPresenter shell:WindowChrome.IsHitTestVisibleInChrome="True" Grid.Column="2" x:Name="ContentPresenterMain" Content="{TemplateBinding NonClientAreaContent}"/>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Row="1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Path Data="{TemplateBinding Image}" Fill="{TemplateBinding ImageBrush}" HorizontalAlignment="Center" Visibility="{TemplateBinding ShowImage,Converter={StaticResource Boolean2VisibilityConverter}}" Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" Margin="20,32,0,0" Width="30" Height="30" Stretch="Uniform"/>
|
||||||
|
<ScrollViewer Grid.Column="1" Grid.Row="0">
|
||||||
|
<TextBlock Margin="10,39,10,10" Text="{TemplateBinding Message}" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
||||||
|
</ScrollViewer>
|
||||||
|
<StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Margin="0,10,0,16" Orientation="Horizontal" Background="{DynamicResource RegionBrush}" HorizontalAlignment="Center">
|
||||||
|
<Button Visibility="{Binding IsEnabled,RelativeSource={RelativeSource Self},Converter={StaticResource Boolean2VisibilityConverter}}" IsCancel="True" MinWidth="88" Command="interactivity:ControlCommands.Cancel" Content="{x:Static langs:Lang.Cancel}" Margin="5,0"/>
|
||||||
|
<Button Visibility="{Binding IsEnabled,RelativeSource={RelativeSource Self},Converter={StaticResource Boolean2VisibilityConverter}}" IsDefault="True" MinWidth="88" Command="interactivity:ControlCommands.Confirm" Content="{x:Static langs:Lang.Confirm}" Margin="5,0" Style="{StaticResource ButtonPrimary}"/>
|
||||||
|
<Button Visibility="{Binding IsEnabled,RelativeSource={RelativeSource Self},Converter={StaticResource Boolean2VisibilityConverter}}" IsCancel="True" MinWidth="88" Command="interactivity:ControlCommands.No" Content="{x:Static langs:Lang.No}" Margin="5,0"/>
|
||||||
|
<Button Visibility="{Binding IsEnabled,RelativeSource={RelativeSource Self},Converter={StaticResource Boolean2VisibilityConverter}}" IsDefault="True" MinWidth="88" Command="interactivity:ControlCommands.Yes" Content="{x:Static langs:Lang.Yes}" Margin="5,0" Style="{StaticResource ButtonPrimary}"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsActive" Value="False">
|
||||||
|
<Setter Property="Opacity" Value=".8" TargetName="ContentPresenterMain"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="Icon" Value="{x:Null}">
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="Icon"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="WindowState" Value="Maximized">
|
||||||
|
<Setter Property="Padding" Value="8"/>
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="ButtonMax"/>
|
||||||
|
<Setter Property="Visibility" Value="Visible" TargetName="ButtonRestore"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="WindowState" Value="Normal">
|
||||||
|
<Setter Property="Visibility" Value="Visible" TargetName="ButtonMax"/>
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="ButtonRestore"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="ResizeMode" Value="NoResize">
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="ButtonMin"/>
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="ButtonMax"/>
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="ButtonRestore"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="ResizeMode" Value="CanMinimize">
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="ButtonMax"/>
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="ButtonRestore"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True" SourceName="ButtonClose">
|
||||||
|
<Setter Property="Background" TargetName="ButtonClose" Value="{Binding CloseButtonHoverBackground,RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
|
||||||
|
<Setter Property="Foreground" TargetName="ButtonClose" Value="{Binding CloseButtonHoverForeground,RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True" SourceName="ButtonMax">
|
||||||
|
<Setter Property="Background" TargetName="ButtonMax" Value="{Binding OtherButtonHoverBackground,RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
|
||||||
|
<Setter Property="Foreground" TargetName="ButtonMax" Value="{Binding OtherButtonHoverForeground,RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True" SourceName="ButtonRestore">
|
||||||
|
<Setter Property="Background" TargetName="ButtonRestore" Value="{Binding OtherButtonHoverBackground,RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
|
||||||
|
<Setter Property="Foreground" TargetName="ButtonRestore" Value="{Binding OtherButtonHoverForeground,RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True" SourceName="ButtonMin">
|
||||||
|
<Setter Property="Background" TargetName="ButtonMin" Value="{Binding OtherButtonHoverBackground,RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
|
||||||
|
<Setter Property="Foreground" TargetName="ButtonMin" Value="{Binding OtherButtonHoverForeground,RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="ShowTitle" Value="False">
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="Title"/>
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
</Setter.Value>
|
</Setter.Value>
|
||||||
</Setter>
|
</Setter>
|
||||||
</Style>
|
</Style>
|
||||||
|
|||||||
@@ -90,6 +90,12 @@
|
|||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.Designer.cs">
|
||||||
|
<Link>Properties\Langs\Lang.Designer.cs</Link>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Lang.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="UserControl\Main\NoUserContent.xaml.cs">
|
<Compile Include="UserControl\Main\NoUserContent.xaml.cs">
|
||||||
<DependentUpon>NoUserContent.xaml</DependentUpon>
|
<DependentUpon>NoUserContent.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -372,13 +378,22 @@
|
|||||||
<Link>Resources\Img\under_construction.gif</Link>
|
<Link>Resources\Img\under_construction.gif</Link>
|
||||||
</Resource>
|
</Resource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Page Include="UserControl\Main\NoUserContent.xaml">
|
<Page Include="UserControl\Main\NoUserContent.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.en.resx">
|
||||||
|
<Link>Properties\Langs\Lang.en.resx</Link>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.resx">
|
||||||
|
<Link>Properties\Langs\Lang.resx</Link>
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Lang.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="..\..\Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems" Label="Shared" />
|
<Import Project="..\..\Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems" Label="Shared" />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
@@ -80,6 +80,14 @@
|
|||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
<netVersion>netgt40</netVersion>
|
<netVersion>netgt40</netVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.Designer.cs">
|
||||||
|
<Link>Properties\Langs\Lang.Designer.cs</Link>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Lang.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
<Reference Include="PresentationFramework" />
|
<Reference Include="PresentationFramework" />
|
||||||
@@ -120,6 +128,16 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.en.resx">
|
||||||
|
<Link>Properties\Langs\Lang.en.resx</Link>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.resx">
|
||||||
|
<Link>Properties\Langs\Lang.resx</Link>
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Lang.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
|
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
@@ -30,9 +30,7 @@
|
|||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" />
|
<!-- <Compile Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.Designer.cs" /> -->
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.Designer.cs" />
|
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.en.Designer.cs" />
|
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Service\DataService.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Service\DataService.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\String2BrushConverter.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\String2BrushConverter.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\StringRepeatConverter.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\StringRepeatConverter.cs" />
|
||||||
@@ -349,18 +347,10 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Include="$(MSBuildThisFileDirectory)Resources\Themes\Style.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
<Page Include="$(MSBuildThisFileDirectory)Resources\Themes\Styles\Style.xaml">
|
<Page Include="$(MSBuildThisFileDirectory)Resources\Themes\Styles\Style.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Include="$(MSBuildThisFileDirectory)Resources\Themes\Styles\StyleDark.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
<Page Include="$(MSBuildThisFileDirectory)Resources\Themes\Theme.xaml">
|
<Page Include="$(MSBuildThisFileDirectory)Resources\Themes\Theme.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
@@ -708,8 +698,4 @@
|
|||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</ApplicationDefinition>
|
</ApplicationDefinition>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.en.resx" />
|
|
||||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.resx" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1032,6 +1032,15 @@ namespace HandyControlDemo.Properties.Langs {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 重复按钮 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
public static string RepeatButton {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("RepeatButton", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 回复 的本地化字符串。
|
/// 查找类似 回复 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Whitespace-only changes.
@@ -564,4 +564,7 @@
|
|||||||
<data name="Click2Count" xml:space="preserve">
|
<data name="Click2Count" xml:space="preserve">
|
||||||
<value>Click to count</value>
|
<value>Click to count</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="RepeatButton" xml:space="preserve">
|
||||||
|
<value>RepeatButton</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -564,4 +564,7 @@
|
|||||||
<data name="Click2Count" xml:space="preserve">
|
<data name="Click2Count" xml:space="preserve">
|
||||||
<value>点击计数</value>
|
<value>点击计数</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="RepeatButton" xml:space="preserve">
|
||||||
|
<value>重复按钮</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
|
||||||
|
|
||||||
<ResourceDictionary.MergedDictionaries>
|
|
||||||
<ResourceDictionary Source="Basic/Brushes.xaml"/>
|
|
||||||
</ResourceDictionary.MergedDictionaries>
|
|
||||||
|
|
||||||
</ResourceDictionary>
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
|
||||||
|
|
||||||
<ResourceDictionary.MergedDictionaries>
|
|
||||||
<ResourceDictionary Source="../Basic/Brushes.xaml"/>
|
|
||||||
<ResourceDictionary Source="../Basic/Geometries.xaml"/>
|
|
||||||
<ResourceDictionary Source="../Basic/Converters.xaml"/>
|
|
||||||
<ResourceDictionary Source="ListBoxItem.xaml"/>
|
|
||||||
<ResourceDictionary Source="Label.xaml"/>
|
|
||||||
<ResourceDictionary Source="Button.xaml"/>
|
|
||||||
</ResourceDictionary.MergedDictionaries>
|
|
||||||
|
|
||||||
</ResourceDictionary>
|
|
||||||
@@ -1,15 +1,31 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace HandyControlDemo.Tools
|
namespace HandyControlDemo.Tools
|
||||||
{
|
{
|
||||||
public class AssemblyHelper
|
internal class AssemblyHelper
|
||||||
{
|
{
|
||||||
private static readonly string NameSpaceStr = typeof(AssemblyHelper).Assembly.GetName().Name;
|
private static readonly string NameSpaceStr = typeof(AssemblyHelper).Assembly.GetName().Name;
|
||||||
|
|
||||||
|
private static readonly Dictionary<string, object> CacheDic = new Dictionary<string, object>();
|
||||||
|
|
||||||
|
public static void Register(string name, object instance) => CacheDic[name] = instance;
|
||||||
|
|
||||||
|
public static object ResolveByKey(string key)
|
||||||
|
{
|
||||||
|
if (CacheDic.TryGetValue(key, out var value))
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static object CreateInternalInstance(string className)
|
public static object CreateInternalInstance(string className)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
var type = Type.GetType($"{NameSpaceStr}.{className}");
|
var type = Type.GetType($"{NameSpaceStr}.{className}");
|
||||||
return type == null ? null : Activator.CreateInstance(type);
|
return type == null ? null : Activator.CreateInstance(type);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
using HandyControlDemo.Tools;
|
||||||
|
using HandyControlDemo.ViewModel;
|
||||||
|
|
||||||
namespace HandyControlDemo.UserControl
|
namespace HandyControlDemo.UserControl
|
||||||
{
|
{
|
||||||
@@ -7,8 +9,13 @@ namespace HandyControlDemo.UserControl
|
|||||||
public NotifyIconDemoCtl()
|
public NotifyIconDemoCtl()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
AssemblyHelper.Register(nameof(NotifyIconDemoCtl), this);
|
||||||
|
Unloaded += NotifyIconDemoCtl_Unloaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void NotifyIconDemoCtl_Unloaded(object sender, RoutedEventArgs e) => ViewModelLocator.Instance.NotifyIconDemo.Cleanup();
|
||||||
|
|
||||||
private void ButtonPush_OnClick(object sender, RoutedEventArgs e) => NotifyIconContextContent.CloseContextControl();
|
private void ButtonPush_OnClick(object sender, RoutedEventArgs e) => NotifyIconContextContent.CloseContextControl();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,6 +12,10 @@ namespace HandyControlDemo.ViewModel
|
|||||||
{
|
{
|
||||||
public class NotifyIconDemoViewModel : ViewModelBase
|
public class NotifyIconDemoViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
|
private bool _isCleanup;
|
||||||
|
|
||||||
|
private bool _reversed;
|
||||||
|
|
||||||
private bool _contextMenuIsShow;
|
private bool _contextMenuIsShow;
|
||||||
|
|
||||||
public bool ContextMenuIsShow
|
public bool ContextMenuIsShow
|
||||||
@@ -25,6 +29,12 @@ namespace HandyControlDemo.ViewModel
|
|||||||
Set(ref _contextMenuIsShow, value);
|
Set(ref _contextMenuIsShow, value);
|
||||||
#endif
|
#endif
|
||||||
GlobalData.NotifyIconIsShow = ContextMenuIsShow || ContextContentIsShow;
|
GlobalData.NotifyIconIsShow = ContextMenuIsShow || ContextContentIsShow;
|
||||||
|
if (!_isCleanup && !_reversed)
|
||||||
|
{
|
||||||
|
_reversed = true;
|
||||||
|
ContextContentIsShow = !value;
|
||||||
|
_reversed = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,6 +63,12 @@ namespace HandyControlDemo.ViewModel
|
|||||||
Set(ref _contextContentIsShow, value);
|
Set(ref _contextContentIsShow, value);
|
||||||
#endif
|
#endif
|
||||||
GlobalData.NotifyIconIsShow = ContextMenuIsShow || ContextContentIsShow;
|
GlobalData.NotifyIconIsShow = ContextMenuIsShow || ContextContentIsShow;
|
||||||
|
if (!_isCleanup && !_reversed)
|
||||||
|
{
|
||||||
|
_reversed = true;
|
||||||
|
ContextMenuIsShow = !value;
|
||||||
|
_reversed = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,5 +86,18 @@ namespace HandyControlDemo.ViewModel
|
|||||||
|
|
||||||
public RelayCommand<object> MouseCmd => new Lazy<RelayCommand<object>>(() =>
|
public RelayCommand<object> MouseCmd => new Lazy<RelayCommand<object>>(() =>
|
||||||
new RelayCommand<object>(str=> Growl.Info(str.ToString()))).Value;
|
new RelayCommand<object>(str=> Growl.Info(str.ToString()))).Value;
|
||||||
|
|
||||||
|
public override void Cleanup()
|
||||||
|
{
|
||||||
|
base.Cleanup();
|
||||||
|
|
||||||
|
_isCleanup = true;
|
||||||
|
ContextMenuIsShow = false;
|
||||||
|
ContextMenuIsBlink = false;
|
||||||
|
ContextContentIsShow = false;
|
||||||
|
ContextContentIsBlink = false;
|
||||||
|
GlobalData.NotifyIconIsShow = false;
|
||||||
|
_isCleanup = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ namespace HandyControlDemo.ViewModel
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 命令
|
#region 命令
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 切换例子命令
|
/// 切换例子命令
|
||||||
@@ -109,7 +109,8 @@ namespace HandyControlDemo.ViewModel
|
|||||||
_listBoxItemCurrent = item;
|
_listBoxItemCurrent = item;
|
||||||
ContentTitle = item.Content;
|
ContentTitle = item.Content;
|
||||||
Messenger.Default.Send(false, MessageToken.FullSwitch);
|
Messenger.Default.Send(false, MessageToken.FullSwitch);
|
||||||
Messenger.Default.Send(AssemblyHelper.CreateInternalInstance($"UserControl.{tag}"), MessageToken.LoadShowContent);
|
var obj = AssemblyHelper.ResolveByKey(tag);
|
||||||
|
Messenger.Default.Send(obj ?? AssemblyHelper.CreateInternalInstance($"UserControl.{tag}"), MessageToken.LoadShowContent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Controls.Primitives;
|
using System.Windows.Controls.Primitives;
|
||||||
@@ -14,6 +16,8 @@ namespace HandyControl.Controls
|
|||||||
{
|
{
|
||||||
public class NotifyIcon : FrameworkElement, IDisposable
|
public class NotifyIcon : FrameworkElement, IDisposable
|
||||||
{
|
{
|
||||||
|
private bool _isMouseOver;
|
||||||
|
|
||||||
private bool _added;
|
private bool _added;
|
||||||
|
|
||||||
private readonly object _syncObj = new object();
|
private readonly object _syncObj = new object();
|
||||||
@@ -44,7 +48,9 @@ namespace HandyControl.Controls
|
|||||||
|
|
||||||
private bool _doubleClick;
|
private bool _doubleClick;
|
||||||
|
|
||||||
private DispatcherTimer _dispatcherTimer;
|
private DispatcherTimer _dispatcherTimerBlink;
|
||||||
|
|
||||||
|
private DispatcherTimer _dispatcherTimerPos;
|
||||||
|
|
||||||
private bool _isTransparent;
|
private bool _isTransparent;
|
||||||
|
|
||||||
@@ -87,6 +93,12 @@ namespace HandyControl.Controls
|
|||||||
OnIconChanged();
|
OnIconChanged();
|
||||||
UpdateIcon(true);
|
UpdateIcon(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_dispatcherTimerPos = new DispatcherTimer
|
||||||
|
{
|
||||||
|
Interval = TimeSpan.FromMilliseconds(200)
|
||||||
|
};
|
||||||
|
_dispatcherTimerPos.Tick += DispatcherTimerPos_Tick;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Application.Current != null) Application.Current.Exit += (s, e) => Dispose();
|
if (Application.Current != null) Application.Current.Exit += (s, e) => Dispose();
|
||||||
@@ -137,9 +149,9 @@ namespace HandyControl.Controls
|
|||||||
private static void OnBlinkIntervalChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
private static void OnBlinkIntervalChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
var ctl = (NotifyIcon)d;
|
var ctl = (NotifyIcon)d;
|
||||||
if (ctl._dispatcherTimer != null)
|
if (ctl._dispatcherTimerBlink != null)
|
||||||
{
|
{
|
||||||
ctl._dispatcherTimer.Interval = (TimeSpan) e.NewValue;
|
ctl._dispatcherTimerBlink.Interval = (TimeSpan) e.NewValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,30 +170,175 @@ namespace HandyControl.Controls
|
|||||||
if (ctl.Visibility != Visibility.Visible) return;
|
if (ctl.Visibility != Visibility.Visible) return;
|
||||||
if ((bool) e.NewValue)
|
if ((bool) e.NewValue)
|
||||||
{
|
{
|
||||||
if (ctl._dispatcherTimer == null)
|
if (ctl._dispatcherTimerBlink == null)
|
||||||
{
|
{
|
||||||
ctl._dispatcherTimer = new DispatcherTimer
|
ctl._dispatcherTimerBlink = new DispatcherTimer
|
||||||
{
|
{
|
||||||
Interval = ctl.BlinkInterval
|
Interval = ctl.BlinkInterval
|
||||||
};
|
};
|
||||||
ctl._dispatcherTimer.Tick += ctl.DispatcherTimer_Tick;
|
ctl._dispatcherTimerBlink.Tick += ctl.DispatcherTimerBlinkTick;
|
||||||
}
|
}
|
||||||
ctl._dispatcherTimer.Start();
|
ctl._dispatcherTimerBlink.Start();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ctl._dispatcherTimer?.Stop();
|
ctl._dispatcherTimerBlink?.Stop();
|
||||||
ctl._dispatcherTimer = null;
|
ctl._dispatcherTimerBlink = null;
|
||||||
ctl.UpdateIcon(true);
|
ctl.UpdateIcon(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DispatcherTimer_Tick(object sender, EventArgs e)
|
private void DispatcherTimerBlinkTick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (Visibility != Visibility.Visible || _iconCurrentHandle == IntPtr.Zero) return;
|
if (Visibility != Visibility.Visible || _iconCurrentHandle == IntPtr.Zero) return;
|
||||||
UpdateIcon(true, !_isTransparent);
|
UpdateIcon(true, !_isTransparent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool CheckMouseIsEnter()
|
||||||
|
{
|
||||||
|
var isTrue = FindNotifyIcon(out var rectNotify);
|
||||||
|
if (!isTrue) return false;
|
||||||
|
NativeMethods.GetCursorPos(out var point);
|
||||||
|
if (point.X >= rectNotify.Left && point.X <= rectNotify.Right &&
|
||||||
|
point.Y >= rectNotify.Top && point.Y <= rectNotify.Bottom)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DispatcherTimerPos_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (CheckMouseIsEnter())
|
||||||
|
{
|
||||||
|
if (!_isMouseOver)
|
||||||
|
{
|
||||||
|
_isMouseOver = true;
|
||||||
|
RaiseEvent(new MouseEventArgs(Mouse.PrimaryDevice, Environment.TickCount)
|
||||||
|
{
|
||||||
|
RoutedEvent = MouseEnterEvent
|
||||||
|
});
|
||||||
|
_dispatcherTimerPos.Interval = TimeSpan.FromMilliseconds(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_dispatcherTimerPos.Stop();
|
||||||
|
_isMouseOver = false;
|
||||||
|
RaiseEvent(new MouseEventArgs(Mouse.PrimaryDevice, Environment.TickCount)
|
||||||
|
{
|
||||||
|
RoutedEvent = MouseLeaveEvent
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//referenced from http://www.cnblogs.com/sczmzx/p/5158127.html
|
||||||
|
private IntPtr FindTrayToolbarWindow()
|
||||||
|
{
|
||||||
|
var hWnd = NativeMethods.FindWindow("Shell_TrayWnd", null);
|
||||||
|
if (hWnd != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
hWnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "TrayNotifyWnd", null);
|
||||||
|
if (hWnd != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
|
||||||
|
hWnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "SysPager", null);
|
||||||
|
if (hWnd != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
hWnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "ToolbarWindow32", null);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hWnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
//referenced from http://www.cnblogs.com/sczmzx/p/5158127.html
|
||||||
|
private IntPtr FindTrayToolbarOverFlowWindow()
|
||||||
|
{
|
||||||
|
var hWnd = NativeMethods.FindWindow("NotifyIconOverflowWindow", null);
|
||||||
|
if (hWnd != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
hWnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, "ToolbarWindow32", null);
|
||||||
|
}
|
||||||
|
return hWnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool FindNotifyIcon(out NativeMethods.RECT rect)
|
||||||
|
{
|
||||||
|
var rectNotify = new NativeMethods.RECT();
|
||||||
|
var hTrayWnd = FindTrayToolbarWindow();
|
||||||
|
var isTrue = FindNotifyIcon(hTrayWnd, ref rectNotify);
|
||||||
|
if (!isTrue)
|
||||||
|
{
|
||||||
|
hTrayWnd = FindTrayToolbarOverFlowWindow();
|
||||||
|
isTrue = FindNotifyIcon(hTrayWnd, ref rectNotify);
|
||||||
|
}
|
||||||
|
rect = rectNotify;
|
||||||
|
return isTrue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//referenced from http://www.cnblogs.com/sczmzx/p/5158127.html
|
||||||
|
private bool FindNotifyIcon(IntPtr hTrayWnd, ref NativeMethods.RECT rectNotify)
|
||||||
|
{
|
||||||
|
NativeMethods.GetWindowRect(hTrayWnd, out var rectTray);
|
||||||
|
var count = (int)NativeMethods.SendMessage(hTrayWnd, NativeMethods.TB_BUTTONCOUNT, 0, IntPtr.Zero);
|
||||||
|
|
||||||
|
var isFind = false;
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
NativeMethods.GetWindowThreadProcessId(hTrayWnd, out var trayPid);
|
||||||
|
var hProcess = NativeMethods.OpenProcess(NativeMethods.ProcessAccess.VMOperation | NativeMethods.ProcessAccess.VMRead | NativeMethods.ProcessAccess.VMWrite, false, trayPid);
|
||||||
|
var address = NativeMethods.VirtualAllocEx(hProcess, IntPtr.Zero, 1024, NativeMethods.AllocationType.Commit, NativeMethods.MemoryProtection.ReadWrite);
|
||||||
|
|
||||||
|
var btnData = new NativeMethods.TBBUTTON();
|
||||||
|
var trayData = new NativeMethods.TRAYDATA();
|
||||||
|
var handel = Process.GetCurrentProcess().Id;
|
||||||
|
|
||||||
|
for (uint i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
NativeMethods.SendMessage(hTrayWnd, NativeMethods.TB_GETBUTTON, i, address);
|
||||||
|
var isTrue = NativeMethods.ReadProcessMemory(hProcess, address, out btnData, Marshal.SizeOf(btnData), out _);
|
||||||
|
if (!isTrue) continue;
|
||||||
|
if (btnData.dwData == IntPtr.Zero)
|
||||||
|
{
|
||||||
|
btnData.dwData = btnData.iString;
|
||||||
|
}
|
||||||
|
NativeMethods.ReadProcessMemory(hProcess, btnData.dwData, out trayData, Marshal.SizeOf(trayData), out _);
|
||||||
|
NativeMethods.GetWindowThreadProcessId(trayData.hwnd, out var dwProcessId);
|
||||||
|
if (dwProcessId == (uint)handel)
|
||||||
|
{
|
||||||
|
var rect = new NativeMethods.RECT();
|
||||||
|
var lngRect = NativeMethods.VirtualAllocEx(hProcess, IntPtr.Zero, Marshal.SizeOf(typeof(Rect)), NativeMethods.AllocationType.Commit, NativeMethods.MemoryProtection.ReadWrite);
|
||||||
|
NativeMethods.SendMessage(hTrayWnd, NativeMethods.TB_GETITEMRECT, i, lngRect);
|
||||||
|
NativeMethods.ReadProcessMemory(hProcess, lngRect, out rect, Marshal.SizeOf(rect), out _);
|
||||||
|
|
||||||
|
NativeMethods.VirtualFreeEx(hProcess, lngRect, Marshal.SizeOf(rect), NativeMethods.FreeType.Decommit);
|
||||||
|
NativeMethods.VirtualFreeEx(hProcess, lngRect, 0, NativeMethods.FreeType.Release);
|
||||||
|
|
||||||
|
var left = rectTray.Left + rect.Left;
|
||||||
|
var top = rectTray.Top + rect.Top;
|
||||||
|
var botton = rectTray.Top + rect.Bottom;
|
||||||
|
var right = rectTray.Left + rect.Right;
|
||||||
|
rectNotify = new NativeMethods.RECT
|
||||||
|
{
|
||||||
|
Left = left,
|
||||||
|
Right = right,
|
||||||
|
Top = top,
|
||||||
|
Bottom = botton
|
||||||
|
};
|
||||||
|
isFind = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NativeMethods.VirtualFreeEx(hProcess, address, 0x4096, NativeMethods.FreeType.Decommit);
|
||||||
|
NativeMethods.VirtualFreeEx(hProcess, address, 0, NativeMethods.FreeType.Release);
|
||||||
|
NativeMethods.CloseHandle(hProcess);
|
||||||
|
}
|
||||||
|
return isFind;
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsBlink
|
public bool IsBlink
|
||||||
{
|
{
|
||||||
get => (bool) GetValue(IsBlinkProperty);
|
get => (bool) GetValue(IsBlinkProperty);
|
||||||
@@ -289,6 +446,13 @@ namespace HandyControl.Controls
|
|||||||
ShowContextMenu();
|
ShowContextMenu();
|
||||||
WmMouseUp(MouseButton.Right);
|
WmMouseUp(MouseButton.Right);
|
||||||
break;
|
break;
|
||||||
|
case NativeMethods.WM_MOUSEMOVE:
|
||||||
|
if (!_dispatcherTimerPos.IsEnabled)
|
||||||
|
{
|
||||||
|
_dispatcherTimerPos.Interval = TimeSpan.FromMilliseconds(200);
|
||||||
|
_dispatcherTimerPos.Start();
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -390,9 +554,9 @@ namespace HandyControl.Controls
|
|||||||
if (_isDisposed) return;
|
if (_isDisposed) return;
|
||||||
if (disposing)
|
if (disposing)
|
||||||
{
|
{
|
||||||
if (_dispatcherTimer != null && IsBlink)
|
if (_dispatcherTimerBlink != null && IsBlink)
|
||||||
{
|
{
|
||||||
_dispatcherTimer.Stop();
|
_dispatcherTimerBlink.Stop();
|
||||||
}
|
}
|
||||||
UpdateIcon(false);
|
UpdateIcon(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ namespace HandyControl.Controls
|
|||||||
|
|
||||||
public static readonly DependencyProperty NonClientAreaHeightProperty = DependencyProperty.Register(
|
public static readonly DependencyProperty NonClientAreaHeightProperty = DependencyProperty.Register(
|
||||||
"NonClientAreaHeight", typeof(double), typeof(Window),
|
"NonClientAreaHeight", typeof(double), typeof(Window),
|
||||||
new PropertyMetadata(28.0));
|
new PropertyMetadata(26.0));
|
||||||
|
|
||||||
public static readonly DependencyProperty ShowNonClientAreaProperty = DependencyProperty.Register(
|
public static readonly DependencyProperty ShowNonClientAreaProperty = DependencyProperty.Register(
|
||||||
"ShowNonClientArea", typeof(bool), typeof(Window),
|
"ShowNonClientArea", typeof(bool), typeof(Window),
|
||||||
@@ -288,19 +288,25 @@ namespace HandyControl.Controls
|
|||||||
if (WindowState == WindowState.Maximized)
|
if (WindowState == WindowState.Maximized)
|
||||||
{
|
{
|
||||||
BorderThickness = new Thickness();
|
BorderThickness = new Thickness();
|
||||||
|
_tempNonClientAreaHeight = NonClientAreaHeight;
|
||||||
|
NonClientAreaHeight += 8;
|
||||||
}
|
}
|
||||||
else if (WindowState == WindowState.Normal)
|
else if (WindowState == WindowState.Normal)
|
||||||
{
|
{
|
||||||
BorderThickness = _actualBorderThickness;
|
BorderThickness = _actualBorderThickness;
|
||||||
|
NonClientAreaHeight = _tempNonClientAreaHeight;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void OnLoaded(RoutedEventArgs args)
|
protected void OnLoaded(RoutedEventArgs args)
|
||||||
{
|
{
|
||||||
_actualBorderThickness = BorderThickness;
|
_actualBorderThickness = BorderThickness;
|
||||||
|
_tempNonClientAreaHeight = NonClientAreaHeight;
|
||||||
|
|
||||||
if (WindowState == WindowState.Maximized)
|
if (WindowState == WindowState.Maximized)
|
||||||
{
|
{
|
||||||
BorderThickness = new Thickness();
|
BorderThickness = new Thickness();
|
||||||
|
_tempNonClientAreaHeight += 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandBindings.Add(new CommandBinding(SystemCommands.MinimizeWindowCommand,
|
CommandBindings.Add(new CommandBinding(SystemCommands.MinimizeWindowCommand,
|
||||||
@@ -312,7 +318,6 @@ namespace HandyControl.Controls
|
|||||||
CommandBindings.Add(new CommandBinding(SystemCommands.CloseWindowCommand, (s, e) => Close()));
|
CommandBindings.Add(new CommandBinding(SystemCommands.CloseWindowCommand, (s, e) => Close()));
|
||||||
CommandBindings.Add(new CommandBinding(SystemCommands.ShowSystemMenuCommand, ShowSystemMenu));
|
CommandBindings.Add(new CommandBinding(SystemCommands.ShowSystemMenuCommand, ShowSystemMenu));
|
||||||
|
|
||||||
_tempNonClientAreaHeight = NonClientAreaHeight;
|
|
||||||
_tempWindowState = WindowState;
|
_tempWindowState = WindowState;
|
||||||
_tempWindowStyle = WindowStyle;
|
_tempWindowStyle = WindowStyle;
|
||||||
_tempResizeMode = ResizeMode;
|
_tempResizeMode = ResizeMode;
|
||||||
@@ -320,6 +325,11 @@ namespace HandyControl.Controls
|
|||||||
SwitchIsFullScreen(_isFullScreen);
|
SwitchIsFullScreen(_isFullScreen);
|
||||||
SwitchShowNonClientArea(_showNonClientArea);
|
SwitchShowNonClientArea(_showNonClientArea);
|
||||||
|
|
||||||
|
if (WindowState == WindowState.Maximized)
|
||||||
|
{
|
||||||
|
_tempNonClientAreaHeight -= 8;
|
||||||
|
}
|
||||||
|
|
||||||
if (SizeToContent != SizeToContent.WidthAndHeight)
|
if (SizeToContent != SizeToContent.WidthAndHeight)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -196,9 +196,6 @@
|
|||||||
<Compile Include="$(MSBuildThisFileDirectory)Interactivity\TriggerBase.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Interactivity\TriggerBase.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Interactivity\TriggerCollection.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Interactivity\TriggerCollection.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Interactivity\TypeConstraintAttribute.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Interactivity\TypeConstraintAttribute.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.Designer.cs" />
|
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.en.Designer.cs" />
|
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\Boolean2BooleanReConverter.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\Boolean2BooleanReConverter.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\Boolean2StrConverter.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\Boolean2StrConverter.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\Boolean2VisibilityReConverter.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Converter\Boolean2VisibilityReConverter.cs" />
|
||||||
@@ -366,6 +363,10 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Include="$(MSBuildThisFileDirectory)Themes\Styles\Base\RepeatButtonBaseStyle.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
<Page Include="$(MSBuildThisFileDirectory)Themes\Styles\Base\GotoTopBaseStyle.xaml">
|
<Page Include="$(MSBuildThisFileDirectory)Themes\Styles\Base\GotoTopBaseStyle.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
@@ -618,6 +619,10 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Include="$(MSBuildThisFileDirectory)Themes\Styles\RepeatButton.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
<Page Include="$(MSBuildThisFileDirectory)Themes\Styles\RichTextBox.xaml">
|
<Page Include="$(MSBuildThisFileDirectory)Themes\Styles\RichTextBox.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
@@ -703,8 +708,4 @@
|
|||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.en.resx" />
|
|
||||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Properties\Langs\Lang.resx" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
||||||
Whitespace-only changes.
@@ -0,0 +1,49 @@
|
|||||||
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:controls="clr-namespace:HandyControl.Controls">
|
||||||
|
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="ButtonBaseStyle.xaml"/>
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
|
||||||
|
<Style x:Key="RepeatButtonBaseStyle" BasedOn="{StaticResource ButtonBaseBaseStyle}" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource RegionBrush}"/>
|
||||||
|
<Setter Property="controls:BorderElement.CornerRadius" Value="4"/>
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="RepeatButton">
|
||||||
|
<controls:SimplePanel>
|
||||||
|
<Border Background="{TemplateBinding Background}" CornerRadius="{Binding Path=(controls:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}"/>
|
||||||
|
<Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="{Binding Path=(controls:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}">
|
||||||
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}">
|
||||||
|
<Path x:Name="PathMain" Width="{TemplateBinding controls:IconElement.Width}" Height="{TemplateBinding controls:IconElement.Height}" Fill="{TemplateBinding Foreground}" SnapsToDevicePixels="True" Stretch="Uniform" Data="{TemplateBinding controls:IconElement.Geometry}"/>
|
||||||
|
<ContentPresenter x:Name="ContentPresenterMain" VerticalAlignment="Center" Margin="6,0,0,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</controls:SimplePanel>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="Content" Value="{x:Null}">
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="ContentPresenterMain"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="controls:IconElement.Geometry" Value="{x:Null}">
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" TargetName="PathMain"/>
|
||||||
|
<Setter Property="Margin" Value="0" TargetName="ContentPresenterMain"/>
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Style.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter Property="Opacity" Value=".9"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter Property="Opacity" Value=".6"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter Property="Opacity" Value="0.4"/>
|
||||||
|
</Trigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
</ResourceDictionary>
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:controls="clr-namespace:HandyControl.Controls">
|
||||||
|
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="Base/RepeatButtonBaseStyle.xaml"/>
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
|
||||||
|
<Style BasedOn="{StaticResource RepeatButtonBaseStyle}" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}"/>
|
||||||
|
<Setter Property="BorderThickness" Value="1"/>
|
||||||
|
<Style.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource DarkDefaultBrush}"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource BorderBrush}"/>
|
||||||
|
</Trigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="RepeatButtonPrimary" BasedOn="{StaticResource RepeatButtonBaseStyle}" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource PrimaryBrush}"/>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="RepeatButtonSuccess" BasedOn="{StaticResource RepeatButtonBaseStyle}" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource SuccessBrush}"/>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="RepeatButtonInfo" BasedOn="{StaticResource RepeatButtonBaseStyle}" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource InfoBrush}"/>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="RepeatButtonWarning" BasedOn="{StaticResource RepeatButtonBaseStyle}" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource WarningBrush}"/>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="RepeatButtonDanger" BasedOn="{StaticResource RepeatButtonBaseStyle}" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource DangerBrush}"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="RepeatButtonIcon" BasedOn="{StaticResource RepeatButtonBaseStyle}" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Background" Value="Transparent"/>
|
||||||
|
<Setter Property="BorderBrush" Value="Transparent"/>
|
||||||
|
<Setter Property="controls:BorderElement.CornerRadius" Value="0"/>
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="RepeatButton">
|
||||||
|
<Border CornerRadius="{Binding Path=(controls:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}">
|
||||||
|
<ContentControl HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
|
||||||
|
<Path Fill="{TemplateBinding Foreground}" SnapsToDevicePixels="True" Stretch="Uniform" Width="{TemplateBinding controls:IconElement.Width}" Height="{TemplateBinding controls:IconElement.Height}" Data="{TemplateBinding controls:IconElement.Geometry}"/>
|
||||||
|
</ContentControl>
|
||||||
|
</Border>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="RepeatButtonCustom" TargetType="RepeatButton">
|
||||||
|
<Setter Property="Background" Value="{x:Null}"/>
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}"/>
|
||||||
|
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
||||||
|
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||||||
|
<Setter Property="Padding" Value="0"/>
|
||||||
|
<Setter Property="Focusable" Value="False"/>
|
||||||
|
<Setter Property="IsTabStop" Value="False"/>
|
||||||
|
<Setter Property="BorderThickness" Value="0"/>
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="RepeatButton">
|
||||||
|
<Border x:Name="Chrome" SnapsToDevicePixels="true" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}">
|
||||||
|
<ContentPresenter Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter Property="Opacity" Value=".9"/>
|
||||||
|
<Setter Property="Background" TargetName="Chrome" Value="{Binding Path=(controls:BackgroundSwitchElement.MouseHoverBackground),RelativeSource={RelativeSource TemplatedParent}}"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter Property="Opacity" Value=".6"/>
|
||||||
|
<Setter Property="Background" TargetName="Chrome" Value="{Binding Path=(controls:BackgroundSwitchElement.MouseDownBackground),RelativeSource={RelativeSource TemplatedParent}}"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter Property="Opacity" Value="0.4"/>
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
</ResourceDictionary>
|
||||||
@@ -41,10 +41,165 @@ namespace HandyControl.Tools.Interop
|
|||||||
WM_MBUTTONDOWN = 0x0207,
|
WM_MBUTTONDOWN = 0x0207,
|
||||||
WM_MBUTTONUP = 0x0208,
|
WM_MBUTTONUP = 0x0208,
|
||||||
WM_MBUTTONDBLCLK = 0x0209,
|
WM_MBUTTONDBLCLK = 0x0209,
|
||||||
WM_USER = 0x0400;
|
WM_USER = 0x0400,
|
||||||
|
TB_GETBUTTON = WM_USER + 23,
|
||||||
|
TB_BUTTONCOUNT = WM_USER + 24,
|
||||||
|
TB_GETITEMRECT = WM_USER + 29,
|
||||||
|
STANDARD_RIGHTS_REQUIRED = 0x000F0000,
|
||||||
|
SYNCHRONIZE = 0x00100000,
|
||||||
|
PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF,
|
||||||
|
MEM_COMMIT = 0x1000,
|
||||||
|
MEM_RELEASE = 0x8000,
|
||||||
|
PAGE_READWRITE = 0x04,
|
||||||
|
TBSTATE_HIDDEN = 0x08;
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum ProcessAccess
|
||||||
|
{
|
||||||
|
AllAccess = CreateThread | DuplicateHandle | QueryInformation | SetInformation | Terminate | VMOperation | VMRead | VMWrite | Synchronize,
|
||||||
|
CreateThread = 0x2,
|
||||||
|
DuplicateHandle = 0x40,
|
||||||
|
QueryInformation = 0x400,
|
||||||
|
SetInformation = 0x200,
|
||||||
|
Terminate = 0x1,
|
||||||
|
VMOperation = 0x8,
|
||||||
|
VMRead = 0x10,
|
||||||
|
VMWrite = 0x20,
|
||||||
|
Synchronize = 0x100000
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable, StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
||||||
|
public struct RECT
|
||||||
|
{
|
||||||
|
public int Left;
|
||||||
|
public int Top;
|
||||||
|
public int Right;
|
||||||
|
public int Bottom;
|
||||||
|
|
||||||
|
public RECT(int left, int top, int right, int bottom)
|
||||||
|
{
|
||||||
|
Left = left;
|
||||||
|
Top = top;
|
||||||
|
Right = right;
|
||||||
|
Bottom = bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
|
public struct TBBUTTON
|
||||||
|
{
|
||||||
|
public int iBitmap;
|
||||||
|
public int idCommand;
|
||||||
|
public IntPtr fsStateStylePadding;
|
||||||
|
public IntPtr dwData;
|
||||||
|
public IntPtr iString;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum AllocationType
|
||||||
|
{
|
||||||
|
Commit = 0x1000,
|
||||||
|
Reserve = 0x2000,
|
||||||
|
Decommit = 0x4000,
|
||||||
|
Release = 0x8000,
|
||||||
|
Reset = 0x80000,
|
||||||
|
Physical = 0x400000,
|
||||||
|
TopDown = 0x100000,
|
||||||
|
WriteWatch = 0x200000,
|
||||||
|
LargePages = 0x20000000
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum MemoryProtection
|
||||||
|
{
|
||||||
|
Execute = 0x10,
|
||||||
|
ExecuteRead = 0x20,
|
||||||
|
ExecuteReadWrite = 0x40,
|
||||||
|
ExecuteWriteCopy = 0x80,
|
||||||
|
NoAccess = 0x01,
|
||||||
|
ReadOnly = 0x02,
|
||||||
|
ReadWrite = 0x04,
|
||||||
|
WriteCopy = 0x08,
|
||||||
|
GuardModifierflag = 0x100,
|
||||||
|
NoCacheModifierflag = 0x200,
|
||||||
|
WriteCombineModifierflag = 0x400
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct TRAYDATA
|
||||||
|
{
|
||||||
|
public IntPtr hwnd;
|
||||||
|
public uint uID;
|
||||||
|
public uint uCallbackMessage;
|
||||||
|
public uint bReserved0;
|
||||||
|
public uint bReserved1;
|
||||||
|
public IntPtr hIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum FreeType
|
||||||
|
{
|
||||||
|
Decommit = 0x4000,
|
||||||
|
Release = 0x8000,
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct POINT
|
||||||
|
{
|
||||||
|
public int X;
|
||||||
|
public int Y;
|
||||||
|
|
||||||
|
public POINT(int x, int y)
|
||||||
|
{
|
||||||
|
X = x;
|
||||||
|
Y = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
|
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
|
||||||
[ResourceExposure(ResourceScope.None)]
|
[ResourceExposure(ResourceScope.None)]
|
||||||
public static extern int RegisterWindowMessage(string msg);
|
public static extern int RegisterWindowMessage(string msg);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32, SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern int MapWindowPoints(IntPtr hWndFrom, IntPtr hWndTo, ref RECT lpPoints, uint cPoints);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out TBBUTTON lpBuffer, int dwSize, out int lpNumberOfBytesRead);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.Kernel32, SetLastError = true)]
|
||||||
|
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out RECT lpBuffer, int dwSize, out int lpNumberOfBytesRead);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.Kernel32, SetLastError = true)]
|
||||||
|
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out TRAYDATA lpBuffer, int dwSize, out int lpNumberOfBytesRead);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
|
||||||
|
public static extern uint SendMessage(IntPtr hWnd, uint Msg, uint wParam, IntPtr lParam);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32, SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern IntPtr OpenProcess(ProcessAccess dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, AllocationType flAllocationType, MemoryProtection flProtect);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern int CloseHandle(IntPtr hObject);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, FreeType dwFreeType);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32, SetLastError = true)]
|
||||||
|
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32, SetLastError = true)]
|
||||||
|
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32)]
|
||||||
|
public static extern int GetWindowRect(IntPtr hwnd, out RECT lpRect);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
|
||||||
|
public static extern bool GetCursorPos(out POINT pt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user