Files
ShrlAlgoToolkit/ShrlAlgoToolkit.RevitAddins/RvFamily/FamilyLibrary/FamilyLibraryView.xaml

318 lines
17 KiB
Plaintext
Raw Normal View History

2025-08-20 12:10:35 +08:00
<ui:NeoWindow
2025-04-24 20:56:44 +08:00
Height="600"
MinHeight="600"
MinWidth="1050"
ResizeMode="CanResizeWithGrip"
Title="本地族库"
Width="1050"
d:DataContext="{d:DesignInstance Type=local:FamilyLibraryViewModel}"
mc:Ignorable="d"
x:Class="ShrlAlgoToolkit.RevitAddins.RvFamily.FamilyLibrary.FamilyLibraryView"
2024-09-22 11:05:41 +08:00
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
2025-04-24 20:56:44 +08:00
xmlns:local="clr-namespace:ShrlAlgoToolkit.RevitAddins.RvFamily.FamilyLibrary"
2024-09-22 11:05:41 +08:00
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
2025-08-20 12:10:35 +08:00
xmlns:ui="https://github.com/ShrlAlgo/NeoUI"
2025-04-24 20:56:44 +08:00
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
2024-09-22 11:05:41 +08:00
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
2025-04-24 20:56:10 +08:00
<ResourceDictionary Source="pack://application:,,,/ShrlAlgoToolkit.RevitAddins;component/WPFUI.xaml" />
2024-09-22 11:05:41 +08:00
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="220" />
</Grid.ColumnDefinitions>
2025-08-20 12:10:35 +08:00
<Button
2024-09-22 11:05:41 +08:00
Command="{Binding SelectPathCommand}"
Content="打开族目录"
FontFamily="{StaticResource BoxIcons}"
2025-04-24 20:56:44 +08:00
Grid.Row="0"
HorizontalAlignment="Stretch"
Margin="5"
2025-08-24 13:49:55 +08:00
ToolTip="{Binding FamilyPath, Mode=OneWay, StringFormat=族目录:{}{0}}" >
<ui:ButtonAssist.Icon>
<ui:IconElement Glyph="&#xEADF;"
FontFamily="{StaticResource BoxIcons}"/>
</ui:ButtonAssist.Icon>
</Button>
2024-09-22 11:05:41 +08:00
<TreeView
Grid.Row="1"
2025-04-24 20:56:44 +08:00
ItemsSource="{Binding FolderTreeViewItems}"
2024-09-22 11:05:41 +08:00
d:ItemsSource="{d:SampleData}"
2025-04-24 20:56:44 +08:00
x:Name="FolderTreeView">
2024-09-22 11:05:41 +08:00
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<i:InvokeCommandAction Command="{Binding SelectDirTreeNodeCommand}" CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType={x:Type TreeView}, Mode=FindAncestor}}" />
<!--<behaviors:InvokeCommandAction Command="{Binding SetSelectedItem}" CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TreeView}}" />-->
</i:EventTrigger>
</i:Interaction.Triggers>
</TreeView>
<GridSplitter
Grid.Column="1"
2025-04-24 20:56:44 +08:00
Grid.Row="1"
2024-09-22 11:05:41 +08:00
HorizontalAlignment="Center"
2025-04-24 20:56:44 +08:00
ShowsPreview="True"
Width="1" />
2025-08-20 12:10:35 +08:00
<TextBox
2025-04-24 20:56:44 +08:00
Cursor="IBeam"
2024-09-22 11:05:41 +08:00
Grid.Column="2"
2025-04-24 20:56:44 +08:00
Grid.Row="0"
2024-09-22 11:05:41 +08:00
Margin="5"
2025-08-20 12:10:35 +08:00
ui:InputAssist.Placeholder="请输入搜索关键词"
2025-04-24 20:56:44 +08:00
x:Name="SearchBox">
2024-09-22 11:05:41 +08:00
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<i:InvokeCommandAction Command="{Binding SearchFamilyCommand}" CommandParameter="{Binding Text, RelativeSource={RelativeSource AncestorType={x:Type TextBox}, Mode=FindAncestor}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
2025-08-20 12:10:35 +08:00
</TextBox>
2025-08-24 13:49:55 +08:00
<ListView
2025-04-24 20:56:44 +08:00
Grid.Column="2"
2024-09-22 11:05:41 +08:00
Grid.Row="1"
Grid.RowSpan="2"
ItemsSource="{Binding FamilyPageListViewItems}"
2025-04-24 20:56:44 +08:00
SelectedItem="{Binding SelectedFamily}"
d:ItemsSource="{d:SampleData}">
2024-09-22 11:05:41 +08:00
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding LvSelectionChangedCommand}" CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType={x:Type ListView}, Mode=FindAncestor}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<!--<ListView.View>
<GridView>
<GridViewColumn Header="缩略图" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding ImageData}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Title}" Header="名称" />
<GridViewColumn DisplayMemberBinding="{Binding Path}" Header="路径" />
<GridViewColumn DisplayMemberBinding="{Binding RevitVersion}" Header="版本" />
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button
Command="{Binding DataContext.ImportFamilyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
CommandParameter="{Binding}"
Content="&#xedb7;载入"
FontFamily="{StaticResource BoxIcons}"
ToolTip="将族载入到当前项目" />
<Button
Command="{Binding DataContext.LocationFamilyFileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
CommandParameter="{Binding}"
Content="&#xea90;浏览"
FontFamily="{StaticResource BoxIcons}"
ToolTip="在资源管理器中浏览文件" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>-->
2025-08-24 13:49:55 +08:00
<ListView.ItemContainerStyle>
2024-09-22 11:05:41 +08:00
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border
Background="{TemplateBinding Background}"
BorderBrush="Transparent"
BorderThickness="2"
2025-04-24 20:56:44 +08:00
CornerRadius="5"
Margin="5"
x:Name="border">
2024-09-22 11:05:41 +08:00
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsSelected" Value="False" />
</MultiTrigger.Conditions>
2025-04-24 20:56:44 +08:00
<Setter Property="BorderBrush" TargetName="border" Value="Gray" />
2024-09-22 11:05:41 +08:00
</MultiTrigger>
<Trigger Property="IsSelected" Value="True">
2025-04-24 20:56:44 +08:00
<Setter Property="BorderBrush" TargetName="border" Value="LightSkyBlue" />
2024-09-22 11:05:41 +08:00
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
2025-08-24 13:49:55 +08:00
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
2024-09-22 11:05:41 +08:00
<ItemsPanelTemplate>
<WrapPanel Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType={x:Type ScrollContentPresenter}}}" />
</ItemsPanelTemplate>
2025-08-24 13:49:55 +08:00
</ListView.ItemsPanel>
<ListView.ItemTemplate>
2024-09-22 11:05:41 +08:00
<DataTemplate>
<ui:Card Padding="0">
2025-04-24 20:56:44 +08:00
<Grid Height="210" Width="170">
2024-09-22 11:05:41 +08:00
<Grid.RowDefinitions>
<RowDefinition Height="170" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image
Grid.Row="0"
Height="128"
Source="{Binding ImageData}"
Stretch="Uniform"
2025-04-24 20:56:44 +08:00
ToolTip="{Binding ToolTip}"
Width="128" />
2024-09-22 11:05:41 +08:00
<StackPanel
Grid.Row="0"
HorizontalAlignment="Center"
2025-04-24 20:56:44 +08:00
Orientation="Horizontal"
VerticalAlignment="Bottom">
2024-09-22 11:05:41 +08:00
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}, Mode=FindAncestor}}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
2025-08-20 12:10:35 +08:00
<Button
2025-08-24 13:49:55 +08:00
ui:ButtonAssist.AppearanceType="Primary"
2024-09-22 11:05:41 +08:00
Command="{Binding DataContext.ImportFamilyCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}}"
CommandParameter="{Binding}"
Content="&#xEDB7;载入"
FontFamily="{StaticResource BoxIcons}"
ToolTip="将族载入到当前项目" />
2025-08-20 12:10:35 +08:00
<Button
2025-08-24 13:49:55 +08:00
ui:ButtonAssist.AppearanceType="Primary"
2024-09-22 11:05:41 +08:00
Command="{Binding DataContext.LocationFamilyFileCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}}"
CommandParameter="{Binding}"
Content="&#xEA90;定位"
FontFamily="{StaticResource BoxIcons}"
ToolTip="在资源管理器中浏览文件" />
<!--
CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}}"
CommandParameter="{Binding DataContext, RelativeSource={RelativeSource Mode=Self}}" 等价于 CommandParameter="{Binding}"
-->
</StackPanel>
<TextBlock
Grid.Row="1"
Text="{Binding Title}"
TextAlignment="Center"
2025-04-24 20:56:44 +08:00
TextWrapping="WrapWithOverflow"
Width="128" />
2024-09-22 11:05:41 +08:00
</Grid>
</ui:Card>
</DataTemplate>
2025-08-24 13:49:55 +08:00
</ListView.ItemTemplate>
<ListView.Template>
2024-09-22 11:05:41 +08:00
<ControlTemplate TargetType="{x:Type ListView}">
<ScrollViewer
HorizontalScrollBarVisibility="Disabled"
2025-04-24 20:56:44 +08:00
VerticalScrollBarVisibility="Auto"
x:Name="scr">
2024-09-22 11:05:41 +08:00
<i:Interaction.Triggers>
<i:EventTrigger EventName="ScrollChanged">
<i:InvokeCommandAction Command="{Binding LvScrollCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ScrollViewer}, Mode=FindAncestor}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<WrapPanel IsItemsHost="True" ScrollViewer.CanContentScroll="True" />
</ScrollViewer>
</ControlTemplate>
2025-08-24 13:49:55 +08:00
</ListView.Template>
</ListView>
2024-09-22 11:05:41 +08:00
<GridSplitter
Grid.Column="3"
2025-04-24 20:56:44 +08:00
Grid.Row="1"
2024-09-22 11:05:41 +08:00
HorizontalAlignment="Center"
2025-04-24 20:56:44 +08:00
ShowsPreview="True"
Width="1" />
2025-08-24 13:49:55 +08:00
<DataGrid
2024-09-22 11:05:41 +08:00
AutoGenerateColumns="False"
CanUserAddRows="False"
2025-04-24 20:56:44 +08:00
Grid.Column="4"
Grid.Row="1"
2024-09-22 11:05:41 +08:00
IsReadOnly="True"
2025-04-24 20:56:44 +08:00
ItemsSource="{Binding SelectedItem.Parameters, ElementName=CbbSymbols, Mode=TwoWay}"
Margin="5"
d:ItemsSource="{d:SampleData}">
2025-08-24 13:49:55 +08:00
<DataGrid.Columns>
2024-09-22 11:05:41 +08:00
<DataGridTextColumn Binding="{Binding Name}" Header="属性名" />
<DataGridTextColumn Binding="{Binding Value}" Header="属性值" />
2025-08-24 13:49:55 +08:00
</DataGrid.Columns>
</DataGrid>
2024-09-22 11:05:41 +08:00
<!--<StackPanel
Grid.Row="1"
Grid.Column="2"
Margin="5"
HorizontalAlignment="Right"
VerticalAlignment="Top">
<hc:ButtonGroup Style="{StaticResource ButtonGroupSolid}">
<RadioButton IsChecked="True" Style="{StaticResource RadioGroupItemHorizontalFirst}">
<hc:Interaction.Triggers>
<hc:EventTrigger EventName="Checked">
<hc:EventToCommand Command="{Binding ModifyLayout}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=RadioButton}}" />
</hc:EventTrigger>
</hc:Interaction.Triggers>
</RadioButton>
<RadioButton Style="{StaticResource RadioGroupItemHorizontalLast}">
<hc:Interaction.Triggers>
<hc:EventTrigger EventName="Checked">
<hc:EventToCommand Command="{Binding ModifyLayout}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=RadioButton}}" />
</hc:EventTrigger>
</hc:Interaction.Triggers>
</RadioButton>
</hc:ButtonGroup>
</StackPanel>-->
2025-04-24 20:56:10 +08:00
<ui:StackPanel
2024-09-22 11:05:41 +08:00
Grid.Column="4"
2025-04-24 20:56:44 +08:00
Grid.Row="0"
2024-09-22 11:05:41 +08:00
Orientation="Horizontal">
2025-08-20 12:10:35 +08:00
<ComboBox
2024-09-22 11:05:41 +08:00
DisplayMemberPath="Name"
ItemsSource="{Binding SymbolTypes, Mode=TwoWay}"
2025-08-20 12:10:35 +08:00
ui:InputAssist.Placeholder="选择族类型"
2025-04-24 20:56:44 +08:00
SelectedItem="{Binding SelectedSymbolType, UpdateSourceTrigger=PropertyChanged}"
ui:StackPanel.Fill="Fill"
x:Name="CbbSymbols" />
2024-09-22 11:05:41 +08:00
<Button
Command="{Binding ImportFamilySymbolCommand}"
Content="&#xEB1F;"
FontFamily="{StaticResource BoxIcons}"
2025-04-24 20:56:44 +08:00
Grid.Column="1"
Margin="5"
ToolTip="载入类型"
ui:StackPanel.Fill="Auto" />
2025-04-24 20:56:10 +08:00
</ui:StackPanel>
2024-09-22 11:05:41 +08:00
<TextBlock
Grid.Column="0"
2025-04-24 20:56:44 +08:00
Grid.Row="2"
2024-09-22 11:05:41 +08:00
Margin="5"
Text="{Binding FamilyCount, Mode=OneWay, StringFormat=共计{}{0}个}" />
2025-08-24 13:49:55 +08:00
<ui:Alert
2024-09-22 11:05:41 +08:00
Grid.Column="2"
2025-04-24 20:56:44 +08:00
Grid.Row="2"
2024-09-22 11:05:41 +08:00
Message="{Binding Message}" />
2025-08-24 13:49:55 +08:00
<!--IsOpen="{Binding ActiveSnackbar}"-->
2024-09-22 11:05:41 +08:00
<TextBlock
Grid.Column="4"
2025-04-24 20:56:44 +08:00
Grid.Row="2"
2024-09-22 11:05:41 +08:00
Text="{Binding RevitVersion, Mode=OneWay, StringFormat=当前文件版本Revit \{0\}}" />
</Grid>
2025-08-20 12:10:35 +08:00
</ui:NeoWindow>