mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-07 11:46:30 +02:00
Add item number [WIP]
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 346 B |
@@ -24,7 +24,7 @@
|
|||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="32"></ColumnDefinition>
|
<ColumnDefinition Width="32"></ColumnDefinition>
|
||||||
<ColumnDefinition/>
|
<ColumnDefinition/>
|
||||||
<ColumnDefinition x:Name="contextMenuDefinition" Width="0"/>
|
<ColumnDefinition Width="32" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Image x:Name="imgIco" Width="32" Height="32" HorizontalAlignment="Left" Source="{Binding FullIcoPath,Converter={StaticResource ImageConverter},IsAsync=True}" >
|
<Image x:Name="imgIco" Width="32" Height="32" HorizontalAlignment="Left" Source="{Binding FullIcoPath,Converter={StaticResource ImageConverter},IsAsync=True}" >
|
||||||
</Image>
|
</Image>
|
||||||
@@ -36,13 +36,12 @@
|
|||||||
<TextBlock Style="{DynamicResource ItemTitleStyle}" DockPanel.Dock="Left" VerticalAlignment="Center" ToolTip="{Binding Title}" x:Name="tbTitle" Text="{Binding Title}"></TextBlock>
|
<TextBlock Style="{DynamicResource ItemTitleStyle}" DockPanel.Dock="Left" VerticalAlignment="Center" ToolTip="{Binding Title}" x:Name="tbTitle" Text="{Binding Title}"></TextBlock>
|
||||||
<TextBlock Style="{DynamicResource ItemSubTitleStyle}" ToolTip="{Binding SubTitle}" Visibility="{Binding SubTitle, Converter={converters:StringNullOrEmptyToVisibilityConverter}}" Grid.Row="1" x:Name="tbSubTitle" Text="{Binding SubTitle}"></TextBlock>
|
<TextBlock Style="{DynamicResource ItemSubTitleStyle}" ToolTip="{Binding SubTitle}" Visibility="{Binding SubTitle, Converter={converters:StringNullOrEmptyToVisibilityConverter}}" Grid.Row="1" x:Name="tbSubTitle" Text="{Binding SubTitle}"></TextBlock>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Image Grid.Column="2" VerticalAlignment="Center" Margin="5 0 0 0" Width="12" x:Name="contextMenu" Source="Images/menu.png" ToolTip="Shift + Enter to open context menu"></Image>
|
<TextBlock Grid.Column="2" x:Name="tbItemNumber" Style="{DynamicResource ItemNumberStyle}" Text="9"></TextBlock>
|
||||||
</Grid>
|
</Grid>
|
||||||
<DataTemplate.Triggers>
|
<DataTemplate.Triggers>
|
||||||
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">
|
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">
|
||||||
<Setter TargetName="tbTitle" Property="Style" Value="{DynamicResource ItemTitleSelectedStyle}"/>
|
<Setter TargetName="tbTitle" Property="Style" Value="{DynamicResource ItemTitleSelectedStyle}"/>
|
||||||
<Setter TargetName="tbSubTitle" Property="Style" Value="{DynamicResource ItemSubTitleSelectedStyle}"/>
|
<Setter TargetName="tbSubTitle" Property="Style" Value="{DynamicResource ItemSubTitleSelectedStyle}"/>
|
||||||
<Setter TargetName="contextMenuDefinition" Property="Width" Value="{Binding ContextMenu, Converter={converters:ContextMenuEmptyToWidthConverter}}"/>
|
|
||||||
</DataTrigger>
|
</DataTrigger>
|
||||||
</DataTemplate.Triggers>
|
</DataTemplate.Triggers>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|||||||
@@ -130,21 +130,58 @@ namespace Wox
|
|||||||
|
|
||||||
public List<Result> GetVisibleResults()
|
public List<Result> GetVisibleResults()
|
||||||
{
|
{
|
||||||
var theStackPanel = GetInnerStackPanel(lbResults);
|
|
||||||
List<Result> visibleElements = new List<Result>();
|
List<Result> visibleElements = new List<Result>();
|
||||||
|
VirtualizingStackPanel virtualizingStackPanel = GetInnerStackPanel(lbResults);
|
||||||
for (int i = 0; i < theStackPanel.Children.Count; i++)
|
for (int i = (int)virtualizingStackPanel.VerticalOffset; i <= virtualizingStackPanel.VerticalOffset + virtualizingStackPanel.ViewportHeight; i++)
|
||||||
{
|
{
|
||||||
|
ListBoxItem item = lbResults.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
|
||||||
if (i >= theStackPanel.VerticalOffset && i <= theStackPanel.VerticalOffset + theStackPanel.ViewportHeight)
|
if (item != null)
|
||||||
{
|
{
|
||||||
FrameworkElement element = theStackPanel.Children[i] as FrameworkElement;
|
visibleElements.Add(item.DataContext as Result);
|
||||||
visibleElements.Add(element.DataContext as Result);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return visibleElements;
|
return visibleElements;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateItemNumber()
|
||||||
|
{
|
||||||
|
VirtualizingStackPanel virtualizingStackPanel = GetInnerStackPanel(lbResults);
|
||||||
|
int index = 0;
|
||||||
|
for (int i = (int)virtualizingStackPanel.VerticalOffset; i <= virtualizingStackPanel.VerticalOffset + virtualizingStackPanel.ViewportHeight; i++)
|
||||||
|
{
|
||||||
|
index++;
|
||||||
|
ListBoxItem item = lbResults.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(item);
|
||||||
|
if (myContentPresenter != null)
|
||||||
|
{
|
||||||
|
DataTemplate dataTemplate = myContentPresenter.ContentTemplate;
|
||||||
|
TextBlock tbItemNumber = (TextBlock)dataTemplate.FindName("tbItemNumber", myContentPresenter);
|
||||||
|
tbItemNumber.Text = index.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
|
||||||
|
{
|
||||||
|
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
|
||||||
|
{
|
||||||
|
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
|
||||||
|
if (child != null && child is childItem)
|
||||||
|
return (childItem)child;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
childItem childOfChild = FindVisualChild<childItem>(child);
|
||||||
|
if (childOfChild != null)
|
||||||
|
return childOfChild;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private VirtualizingStackPanel GetInnerStackPanel(FrameworkElement element)
|
private VirtualizingStackPanel GetInnerStackPanel(FrameworkElement element)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
|
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
|
||||||
@@ -189,6 +226,10 @@ namespace Wox
|
|||||||
if (e.AddedItems.Count > 0 && e.AddedItems[0] != null)
|
if (e.AddedItems.Count > 0 && e.AddedItems[0] != null)
|
||||||
{
|
{
|
||||||
lbResults.ScrollIntoView(e.AddedItems[0]);
|
lbResults.ScrollIntoView(e.AddedItems[0]);
|
||||||
|
Dispatcher.DelayInvoke("UpdateItemNumber", o =>
|
||||||
|
{
|
||||||
|
UpdateItemNumber();
|
||||||
|
}, TimeSpan.FromMilliseconds(3));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,12 @@
|
|||||||
<Setter Property="Foreground" Value="#D9D9D4" />
|
<Setter Property="Foreground" Value="#D9D9D4" />
|
||||||
<Setter Property="FontFamily" Value="Arial, Serif" />
|
<Setter Property="FontFamily" Value="Arial, Serif" />
|
||||||
</Style>
|
</Style>
|
||||||
|
<Style x:Key="BaseItemNumberStyle" TargetType="{x:Type TextBlock}">
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center" />
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center" />
|
||||||
|
<Setter Property="Margin" Value="3 0 0 0" />
|
||||||
|
<Setter Property="FontSize" Value="22" />
|
||||||
|
</Style>
|
||||||
<Style x:Key="BaseItemTitleSelectedStyle" TargetType="{x:Type TextBlock}" >
|
<Style x:Key="BaseItemTitleSelectedStyle" TargetType="{x:Type TextBlock}" >
|
||||||
<Setter Property="Foreground" Value="#FFFFF8" />
|
<Setter Property="Foreground" Value="#FFFFF8" />
|
||||||
<Setter Property="FontSize" Value="16" />
|
<Setter Property="FontSize" Value="16" />
|
||||||
@@ -55,9 +61,9 @@
|
|||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="ListBox">
|
<ControlTemplate TargetType="ListBox">
|
||||||
<ScrollViewer Focusable="false" Template="{DynamicResource ScrollViewerControlTemplate}">
|
<ScrollViewer Focusable="false" Template="{DynamicResource ScrollViewerControlTemplate}">
|
||||||
<VirtualizingStackPanel IsItemsHost="True" />
|
<VirtualizingStackPanel IsItemsHost="True" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter.Value>
|
</Setter.Value>
|
||||||
</Setter>
|
</Setter>
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
<Setter Property="Foreground" Value="#333333" />
|
<Setter Property="Foreground" Value="#333333" />
|
||||||
<Setter Property="FontWeight" Value="Bold" />
|
<Setter Property="FontWeight" Value="Bold" />
|
||||||
</Style>
|
</Style>
|
||||||
|
<Style x:Key="ItemNumberStyle" BasedOn="{StaticResource BaseItemNumberStyle}" TargetType="{x:Type TextBlock}">
|
||||||
|
<Setter Property="Foreground" Value="#A6A6A6" />
|
||||||
|
</Style>
|
||||||
<Style x:Key="ItemSubTitleStyle" BasedOn="{StaticResource BaseItemSubTitleStyle}" TargetType="{x:Type TextBlock}">
|
<Style x:Key="ItemSubTitleStyle" BasedOn="{StaticResource BaseItemSubTitleStyle}" TargetType="{x:Type TextBlock}">
|
||||||
<Setter Property="Foreground" Value="#A6A6A6" />
|
<Setter Property="Foreground" Value="#A6A6A6" />
|
||||||
</Style>
|
</Style>
|
||||||
|
|||||||
@@ -334,9 +334,6 @@
|
|||||||
<Resource Include="Images\file.png">
|
<Resource Include="Images\file.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Resource>
|
</Resource>
|
||||||
<Resource Include="Images\menu.png">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Resource>
|
|
||||||
<Resource Include="Images\open.png">
|
<Resource Include="Images\open.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Resource>
|
</Resource>
|
||||||
|
|||||||
Reference in New Issue
Block a user