improved tabcontrol
This commit is contained in:
1 parent
452dc847d7
commit
24612e0e5e
7 files changed
+147
-40
No files matched your search
@@ -292,6 +292,7 @@
|
|||||||
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\SearchBarDemoViewModel.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\SearchBarDemoViewModel.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\SideMenuDemoViewModel.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\SideMenuDemoViewModel.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\StepBarDemoViewModel.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\StepBarDemoViewModel.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\TabControlDemoViewModel.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\WindowDemoViewModel.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\WindowDemoViewModel.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\DemoViewModelBase!1.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\DemoViewModelBase!1.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Main\ContributorsViewModel.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Main\ContributorsViewModel.cs" />
|
||||||
|
|||||||
@@ -2,12 +2,22 @@
|
|||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Background="{DynamicResource RegionBrush}"
|
Background="{DynamicResource RegionBrush}"
|
||||||
xmlns:controls="clr-namespace:HandyControl.Controls;assembly=HandyControl">
|
DataContext="{Binding TabControlDemo,Source={StaticResource Locator}}"
|
||||||
|
xmlns:controls="clr-namespace:HandyControl.Controls;assembly=HandyControl"
|
||||||
|
xmlns:interactivity="clr-namespace:HandyControl.Interactivity;assembly=HandyControl">
|
||||||
<controls:TransitioningContentControl>
|
<controls:TransitioningContentControl>
|
||||||
<controls:ScrollViewer HorizontalScrollBarVisibility="Auto">
|
<controls:ScrollViewer HorizontalScrollBarVisibility="Auto">
|
||||||
|
<interactivity:Interaction.Triggers>
|
||||||
|
<interactivity:RoutedEventTrigger RoutedEvent="controls:TabItem.Closing">
|
||||||
|
<interactivity:EventToCommand Command="{Binding ClosingCmd}" PassEventArgsToCommand="True" />
|
||||||
|
</interactivity:RoutedEventTrigger>
|
||||||
|
<interactivity:RoutedEventTrigger RoutedEvent="controls:TabItem.Closed">
|
||||||
|
<interactivity:EventToCommand Command="{Binding ClosedCmd}" PassEventArgsToCommand="True" />
|
||||||
|
</interactivity:RoutedEventTrigger>
|
||||||
|
</interactivity:Interaction.Triggers>
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<Label Style="{StaticResource LabelPrimary}" Content="Default" Margin="32,32,0,0" HorizontalAlignment="Left"/>
|
<Label Style="{StaticResource LabelPrimary}" Content="Default" Margin="32,32,0,0" HorizontalAlignment="Left"/>
|
||||||
<controls:TabControl Margin="32,16,32,0" Width="800" Height="300" IsScrollable="True">
|
<controls:TabControl ShowOverflowButton="False" ShowScrollButton="True" Margin="32,16,32,0" Width="800" Height="300" IsScrollable="True">
|
||||||
<controls:TabItem Header="TabItem1">
|
<controls:TabItem Header="TabItem1">
|
||||||
<controls:SimplePanel Background="White"/>
|
<controls:SimplePanel Background="White"/>
|
||||||
</controls:TabItem>
|
</controls:TabItem>
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows;
|
||||||
|
using GalaSoft.MvvmLight;
|
||||||
|
using HandyControl.Controls;
|
||||||
|
using HandyControl.Data;
|
||||||
|
#if netle40
|
||||||
|
using GalaSoft.MvvmLight.Command;
|
||||||
|
#else
|
||||||
|
using GalaSoft.MvvmLight.CommandWpf;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace HandyControlDemo.ViewModel
|
||||||
|
{
|
||||||
|
public class TabControlDemoViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
public RelayCommand<CancelRoutedEventArgs> ClosingCmd => new Lazy<RelayCommand<CancelRoutedEventArgs>>(() =>
|
||||||
|
new RelayCommand<CancelRoutedEventArgs>(Closing)).Value;
|
||||||
|
|
||||||
|
private void Closing(CancelRoutedEventArgs args)
|
||||||
|
{
|
||||||
|
Growl.Info($"{(args.OriginalSource as TabItem)?.Header} Closing");
|
||||||
|
}
|
||||||
|
|
||||||
|
public RelayCommand<RoutedEventArgs> ClosedCmd => new Lazy<RelayCommand<RoutedEventArgs>>(() =>
|
||||||
|
new RelayCommand<RoutedEventArgs>(Closed)).Value;
|
||||||
|
|
||||||
|
private void Closed(RoutedEventArgs args)
|
||||||
|
{
|
||||||
|
Growl.Info($"{(args.OriginalSource as TabItem)?.Header} Closed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -34,6 +34,7 @@ namespace HandyControlDemo.ViewModel
|
|||||||
SimpleIoc.Default.Register<InteractiveDialogViewModel>();
|
SimpleIoc.Default.Register<InteractiveDialogViewModel>();
|
||||||
SimpleIoc.Default.Register<BadgeDemoViewModel>();
|
SimpleIoc.Default.Register<BadgeDemoViewModel>();
|
||||||
SimpleIoc.Default.Register<SideMenuDemoViewModel>();
|
SimpleIoc.Default.Register<SideMenuDemoViewModel>();
|
||||||
|
SimpleIoc.Default.Register<TabControlDemoViewModel>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ViewModelLocator Instance => new Lazy<ViewModelLocator>(() =>
|
public static ViewModelLocator Instance => new Lazy<ViewModelLocator>(() =>
|
||||||
@@ -75,6 +76,8 @@ namespace HandyControlDemo.ViewModel
|
|||||||
|
|
||||||
public SideMenuDemoViewModel SideMenuDemo => ServiceLocator.Current.GetInstance<SideMenuDemoViewModel>();
|
public SideMenuDemoViewModel SideMenuDemo => ServiceLocator.Current.GetInstance<SideMenuDemoViewModel>();
|
||||||
|
|
||||||
|
public TabControlDemoViewModel TabControlDemo => ServiceLocator.Current.GetInstance<TabControlDemoViewModel>();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
@@ -30,7 +31,7 @@ namespace HandyControl.Controls
|
|||||||
|
|
||||||
private TabPanel _headerPanel;
|
private TabPanel _headerPanel;
|
||||||
|
|
||||||
private ScrollViewer _scrollviewerOverflow;
|
private ScrollViewer _scrollViewerOverflow;
|
||||||
|
|
||||||
private Button _buttonScrollLeft;
|
private Button _buttonScrollLeft;
|
||||||
|
|
||||||
@@ -146,6 +147,36 @@ namespace HandyControl.Controls
|
|||||||
set => SetValue(IsScrollableProperty, value);
|
set => SetValue(IsScrollableProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否显示溢出按钮
|
||||||
|
/// </summary>
|
||||||
|
public static readonly DependencyProperty ShowOverflowButtonProperty = DependencyProperty.Register(
|
||||||
|
"ShowOverflowButton", typeof(bool), typeof(TabControl), new PropertyMetadata(ValueBoxes.TrueBox));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否显示溢出按钮
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowOverflowButton
|
||||||
|
{
|
||||||
|
get => (bool) GetValue(ShowOverflowButtonProperty);
|
||||||
|
set => SetValue(ShowOverflowButtonProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否显示滚动按钮
|
||||||
|
/// </summary>
|
||||||
|
public static readonly DependencyProperty ShowScrollButtonProperty = DependencyProperty.Register(
|
||||||
|
"ShowScrollButton", typeof(bool), typeof(TabControl), new PropertyMetadata(ValueBoxes.FalseBox));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否显示滚动按钮
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowScrollButton
|
||||||
|
{
|
||||||
|
get => (bool) GetValue(ShowScrollButtonProperty);
|
||||||
|
set => SetValue(ShowScrollButtonProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 可见的标签数量
|
/// 可见的标签数量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -164,7 +195,7 @@ namespace HandyControl.Controls
|
|||||||
if (!IsEnableTabFill)
|
if (!IsEnableTabFill)
|
||||||
{
|
{
|
||||||
_itemShowCount = (int)(ActualWidth / TabItemWidth);
|
_itemShowCount = (int)(ActualWidth / TabItemWidth);
|
||||||
_buttonOverflow.Show(Items.Count > 0 && Items.Count >= _itemShowCount);
|
_buttonOverflow?.Show(ShowOverflowButton && Items.Count > 0 && Items.Count >= _itemShowCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsInternalAction)
|
if (IsInternalAction)
|
||||||
@@ -214,7 +245,7 @@ namespace HandyControl.Controls
|
|||||||
if (IsEnableTabFill) return;
|
if (IsEnableTabFill) return;
|
||||||
|
|
||||||
_buttonOverflow = GetTemplateChild(OverflowButtonKey) as ContextMenuToggleButton;
|
_buttonOverflow = GetTemplateChild(OverflowButtonKey) as ContextMenuToggleButton;
|
||||||
_scrollviewerOverflow = GetTemplateChild(OverflowScrollviewer) as ScrollViewer;
|
_scrollViewerOverflow = GetTemplateChild(OverflowScrollviewer) as ScrollViewer;
|
||||||
_buttonScrollLeft = GetTemplateChild(ScrollButtonLeft) as Button;
|
_buttonScrollLeft = GetTemplateChild(ScrollButtonLeft) as Button;
|
||||||
_buttonScrollRight = GetTemplateChild(ScrollButtonRight) as Button;
|
_buttonScrollRight = GetTemplateChild(ScrollButtonRight) as Button;
|
||||||
|
|
||||||
@@ -224,7 +255,7 @@ namespace HandyControl.Controls
|
|||||||
if (_buttonOverflow != null)
|
if (_buttonOverflow != null)
|
||||||
{
|
{
|
||||||
_itemShowCount = (int)(ActualWidth / TabItemWidth);
|
_itemShowCount = (int)(ActualWidth / TabItemWidth);
|
||||||
_buttonOverflow.Show(Items.Count > 0 && Items.Count >= _itemShowCount);
|
_buttonOverflow.Show(ShowOverflowButton && Items.Count > 0 && Items.Count >= _itemShowCount);
|
||||||
|
|
||||||
var menu = new ContextMenu
|
var menu = new ContextMenu
|
||||||
{
|
{
|
||||||
@@ -240,12 +271,12 @@ namespace HandyControl.Controls
|
|||||||
private void Menu_Closed(object sender, RoutedEventArgs e) => _buttonOverflow.IsChecked = false;
|
private void Menu_Closed(object sender, RoutedEventArgs e) => _buttonOverflow.IsChecked = false;
|
||||||
|
|
||||||
private void ButtonScrollRight_Click(object sender, RoutedEventArgs e) =>
|
private void ButtonScrollRight_Click(object sender, RoutedEventArgs e) =>
|
||||||
_scrollviewerOverflow.ScrollToHorizontalOffsetInternal(Math.Min(
|
_scrollViewerOverflow.ScrollToHorizontalOffsetInternal(Math.Min(
|
||||||
_scrollviewerOverflow.CurrentHorizontalOffset + TabItemWidth, _scrollviewerOverflow.ScrollableWidth));
|
_scrollViewerOverflow.CurrentHorizontalOffset + TabItemWidth, _scrollViewerOverflow.ScrollableWidth));
|
||||||
|
|
||||||
private void ButtonScrollLeft_Click(object sender, RoutedEventArgs e) =>
|
private void ButtonScrollLeft_Click(object sender, RoutedEventArgs e) =>
|
||||||
_scrollviewerOverflow.ScrollToHorizontalOffsetInternal(Math.Max(
|
_scrollViewerOverflow.ScrollToHorizontalOffsetInternal(Math.Max(
|
||||||
_scrollviewerOverflow.CurrentHorizontalOffset - TabItemWidth, 0));
|
_scrollViewerOverflow.CurrentHorizontalOffset - TabItemWidth, 0));
|
||||||
|
|
||||||
private void ButtonOverflow_Click(object sender, RoutedEventArgs e)
|
private void ButtonOverflow_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
@@ -288,11 +319,37 @@ namespace HandyControl.Controls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal double GetHorizontalOffset() => _scrollviewerOverflow?.CurrentHorizontalOffset ?? 0;
|
internal double GetHorizontalOffset() => _scrollViewerOverflow?.CurrentHorizontalOffset ?? 0;
|
||||||
|
|
||||||
internal void UpdateScroll() => _scrollviewerOverflow?.RaiseEvent(new MouseWheelEventArgs(Mouse.PrimaryDevice, Environment.TickCount, 0)
|
internal void UpdateScroll() => _scrollViewerOverflow?.RaiseEvent(new MouseWheelEventArgs(Mouse.PrimaryDevice, Environment.TickCount, 0)
|
||||||
{
|
{
|
||||||
RoutedEvent = MouseWheelEvent
|
RoutedEvent = MouseWheelEvent
|
||||||
});
|
});
|
||||||
|
|
||||||
|
internal void CloseAllItems() => CloseOtherItems(null);
|
||||||
|
|
||||||
|
internal void CloseOtherItems(TabItem currentItem)
|
||||||
|
{
|
||||||
|
IsInternalAction = true;
|
||||||
|
var enumerator = ((IEnumerable)Items).GetEnumerator();
|
||||||
|
while (enumerator.MoveNext())
|
||||||
|
{
|
||||||
|
var item = enumerator.Current;
|
||||||
|
if (!Equals(item, currentItem) && item != null)
|
||||||
|
{
|
||||||
|
var argsClosing = new CancelRoutedEventArgs(TabItem.ClosingEvent, item);
|
||||||
|
var elment = item as UIElement;
|
||||||
|
if (elment != null)
|
||||||
|
{
|
||||||
|
elment.RaiseEvent(argsClosing);
|
||||||
|
if (argsClosing.Cancel) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
elment?.RaiseEvent(new RoutedEventArgs(TabItem.ClosedEvent, item));
|
||||||
|
Items.Remove(item);
|
||||||
|
enumerator = ((IEnumerable)Items).GetEnumerator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Animation;
|
using System.Windows.Media.Animation;
|
||||||
|
using HandyControl.Data;
|
||||||
using HandyControl.Interactivity;
|
using HandyControl.Interactivity;
|
||||||
using HandyControl.Tools;
|
using HandyControl.Tools;
|
||||||
|
|
||||||
@@ -130,26 +130,11 @@ namespace HandyControl.Controls
|
|||||||
|
|
||||||
public TabItem()
|
public TabItem()
|
||||||
{
|
{
|
||||||
CommandBindings.Add(new CommandBinding(ControlCommands.Close, Close));
|
CommandBindings.Add(new CommandBinding(ControlCommands.Close, (s, e) => Close()));
|
||||||
CommandBindings.Add(new CommandBinding(ControlCommands.CloseAll, (s, e) =>
|
CommandBindings.Add(new CommandBinding(ControlCommands.CloseAll,
|
||||||
{
|
(s, e) => { TabControlParent.CloseAllItems(); }));
|
||||||
TabControlParent.IsInternalAction = true;
|
CommandBindings.Add(new CommandBinding(ControlCommands.CloseOther,
|
||||||
TabControlParent.Items.Clear();
|
(s, e) => { TabControlParent.CloseOtherItems(this); }));
|
||||||
}));
|
|
||||||
CommandBindings.Add(new CommandBinding(ControlCommands.CloseOther, (s, e) =>
|
|
||||||
{
|
|
||||||
TabControlParent.IsInternalAction = true;
|
|
||||||
var enumerator = ((IEnumerable)TabControlParent.Items).GetEnumerator();
|
|
||||||
while (enumerator.MoveNext())
|
|
||||||
{
|
|
||||||
var item = enumerator.Current;
|
|
||||||
if (!Equals(item) && item != null)
|
|
||||||
{
|
|
||||||
TabControlParent.Items.Remove(item);
|
|
||||||
enumerator = ((IEnumerable)TabControlParent.Items).GetEnumerator();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private TabControl TabControlParent => new Lazy<TabControl>(() => ItemsControl.ItemsControlFromItemContainer(this) as TabControl).Value;
|
private TabControl TabControlParent => new Lazy<TabControl>(() => ItemsControl.ItemsControlFromItemContainer(this) as TabControl).Value;
|
||||||
@@ -161,11 +146,12 @@ namespace HandyControl.Controls
|
|||||||
Focus();
|
Focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
internal void Close()
|
||||||
/// 关闭
|
|
||||||
/// </summary>
|
|
||||||
private void Close(object sender, RoutedEventArgs e)
|
|
||||||
{
|
{
|
||||||
|
var argsClosing = new CancelRoutedEventArgs(ClosingEvent, this);
|
||||||
|
RaiseEvent(argsClosing);
|
||||||
|
if (argsClosing.Cancel) return;
|
||||||
|
|
||||||
if (TabControlParent.IsEnableAnimation)
|
if (TabControlParent.IsEnableAnimation)
|
||||||
{
|
{
|
||||||
TabPanel.ClearValue(TabPanel.FluidMoveDurationProperty);
|
TabPanel.ClearValue(TabPanel.FluidMoveDurationProperty);
|
||||||
@@ -175,6 +161,7 @@ namespace HandyControl.Controls
|
|||||||
TabPanel.FluidMoveDuration = new Duration(TimeSpan.FromSeconds(0));
|
TabPanel.FluidMoveDuration = new Duration(TimeSpan.FromSeconds(0));
|
||||||
}
|
}
|
||||||
TabControlParent.IsInternalAction = true;
|
TabControlParent.IsInternalAction = true;
|
||||||
|
RaiseEvent(new RoutedEventArgs(ClosedEvent, this));
|
||||||
TabControlParent.Items.Remove(this);
|
TabControlParent.Items.Remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,5 +287,21 @@ namespace HandyControl.Controls
|
|||||||
|
|
||||||
return result > maxIndex ? maxIndex : result;
|
return result > maxIndex ? maxIndex : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly RoutedEvent ClosingEvent = EventManager.RegisterRoutedEvent("Closing", RoutingStrategy.Bubble, typeof(EventHandler), typeof(TabItem));
|
||||||
|
|
||||||
|
public event EventHandler Closing
|
||||||
|
{
|
||||||
|
add => AddHandler(ClosingEvent, value);
|
||||||
|
remove => RemoveHandler(ClosingEvent, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly RoutedEvent ClosedEvent = EventManager.RegisterRoutedEvent("Closed", RoutingStrategy.Bubble, typeof(EventHandler), typeof(TabItem));
|
||||||
|
|
||||||
|
public event EventHandler Closed
|
||||||
|
{
|
||||||
|
add => AddHandler(ClosedEvent, value);
|
||||||
|
remove => RemoveHandler(ClosedEvent, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto"/>
|
||||||
<RowDefinition Height="*"/>
|
<RowDefinition Height="*"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Border Visibility="{Binding Visibility,ElementName=PART_OverflowButton}" Margin="0,-1,0,0" Grid.Row="0" Grid.Column="0" BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}" Background="{DynamicResource RegionBrush}" HorizontalAlignment="Left" Panel.ZIndex="2">
|
<Border Visibility="{TemplateBinding ShowScrollButton,Converter={StaticResource Boolean2VisibilityConverter}}" Margin="0,-1,0,0" Grid.Row="0" Grid.Column="0" BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}" Background="{DynamicResource RegionBrush}" HorizontalAlignment="Left" Panel.ZIndex="2">
|
||||||
<Border.CacheMode>
|
<Border.CacheMode>
|
||||||
<BitmapCache SnapsToDevicePixels="True"/>
|
<BitmapCache SnapsToDevicePixels="True"/>
|
||||||
</Border.CacheMode>
|
</Border.CacheMode>
|
||||||
@@ -134,12 +134,13 @@
|
|||||||
</controls:TabPanel>
|
</controls:TabPanel>
|
||||||
</Border>
|
</Border>
|
||||||
</controls:ScrollViewer>
|
</controls:ScrollViewer>
|
||||||
<Border Visibility="{Binding Visibility,ElementName=PART_OverflowButton}" Margin="0,-1,0,0" Grid.Row="0" Grid.Column="2" BorderThickness="1,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Background="{DynamicResource RegionBrush}" HorizontalAlignment="Right">
|
<Border Margin="0,-1,0,0" Grid.Row="0" Grid.Column="2" BorderThickness="1,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Background="{DynamicResource RegionBrush}" HorizontalAlignment="Right">
|
||||||
<Border.CacheMode>
|
<Border.CacheMode>
|
||||||
<BitmapCache SnapsToDevicePixels="True"/>
|
<BitmapCache SnapsToDevicePixels="True"/>
|
||||||
</Border.CacheMode>
|
</Border.CacheMode>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Button Style="{StaticResource ButtonIcon}" BorderBrush="{DynamicResource BorderBrush}" Padding="8" BorderThickness="0,0,1,0" controls:IconElement.Geometry="{StaticResource RightGeometry}" Foreground="{DynamicResource PrimaryTextBrush}" Background="{DynamicResource SecondaryRegionBrush}" x:Name="PART_ScrollButtonRight"/>
|
<Button Visibility="{TemplateBinding ShowScrollButton,Converter={StaticResource Boolean2VisibilityConverter}}" Style="{StaticResource ButtonIcon}" BorderBrush="{DynamicResource BorderBrush}" Padding="8" controls:IconElement.Geometry="{StaticResource RightGeometry}" Foreground="{DynamicResource PrimaryTextBrush}" Background="{DynamicResource SecondaryRegionBrush}" x:Name="PART_ScrollButtonRight"/>
|
||||||
|
<Border Visibility="{Binding Visibility,ElementName=PART_OverflowButton}" Width="1" Background="{DynamicResource BorderBrush}"/>
|
||||||
<controls:ContextMenuToggleButton x:Name="PART_OverflowButton" Visibility="Collapsed" Style="{StaticResource ToggleButtonIconTransparent}" controls:IconSwitchElement.Geometry="{StaticResource DownGeometry}" controls:IconSwitchElement.GeometrySelected="{StaticResource UpGeometry}"/>
|
<controls:ContextMenuToggleButton x:Name="PART_OverflowButton" Visibility="Collapsed" Style="{StaticResource ToggleButtonIconTransparent}" controls:IconSwitchElement.Geometry="{StaticResource DownGeometry}" controls:IconSwitchElement.GeometrySelected="{StaticResource UpGeometry}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
|
|||||||
Reference in new issue
Block a user