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

317 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
x:Class="ShrlAlgoToolkit.RevitAddins.RvFamily.FamilyLibrary.FamilyLibraryView"
2024-09-22 11:05:41 +08:00
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2025-10-10 11:19:58 +08:00
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
2024-09-22 11:05:41 +08:00
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-10-10 11:19:58 +08:00
Title="本地族库"
Width="1050"
Height="600"
MinWidth="1050"
MinHeight="600"
d:DataContext="{d:DesignInstance Type=local:FamilyLibraryViewModel}"
Icon="{DynamicResource RevitIcon}"
ResizeMode="CanResizeWithGrip"
mc:Ignorable="d">
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
2025-10-10 11:19:58 +08:00
Grid.Row="0"
Margin="5"
HorizontalAlignment="Stretch"
2024-09-22 11:05:41 +08:00
Command="{Binding SelectPathCommand}"
Content="打开族目录"
FontFamily="{StaticResource BoxIcons}"
2025-10-10 11:19:58 +08:00
ToolTip="{Binding FamilyPath, Mode=OneWay, StringFormat=族目录:{}{0}}">
2025-12-23 21:35:54 +08:00
<ui:ControlAssist.Icon>
2025-10-10 11:19:58 +08:00
<ui:IconElement FontFamily="{StaticResource BoxIcons}" Glyph="&#xEADF;" />
2025-12-23 21:35:54 +08:00
</ui:ControlAssist.Icon>
2025-08-24 13:49:55 +08:00
</Button>
2024-09-22 11:05:41 +08:00
<TreeView
2025-10-10 11:19:58 +08:00
x:Name="FolderTreeView"
2024-09-22 11:05:41 +08:00
Grid.Row="1"
d:ItemsSource="{d:SampleData}"
2025-10-10 11:19:58 +08:00
ItemsSource="{Binding FolderTreeViewItems}">
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
2025-04-24 20:56:44 +08:00
Grid.Row="1"
2025-10-10 11:19:58 +08:00
Grid.Column="1"
Width="1"
2024-09-22 11:05:41 +08:00
HorizontalAlignment="Center"
2025-10-10 11:19:58 +08:00
ShowsPreview="True" />
2025-08-20 12:10:35 +08:00
<TextBox
2025-10-10 11:19:58 +08:00
x:Name="SearchBox"
2025-04-24 20:56:44 +08:00
Grid.Row="0"
2025-10-10 11:19:58 +08:00
Grid.Column="2"
2024-09-22 11:05:41 +08:00
Margin="5"
2025-12-23 21:35:54 +08:00
ui:InputAssist.PlaceholderText="请输入搜索关键词"
2025-10-10 11:19:58 +08:00
Cursor="IBeam">
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
2024-09-22 11:05:41 +08:00
Grid.Row="1"
Grid.RowSpan="2"
2025-10-10 11:19:58 +08:00
Grid.Column="2"
d:ItemsSource="{d:SampleData}"
2024-09-22 11:05:41 +08:00
ItemsSource="{Binding FamilyPageListViewItems}"
2025-10-10 11:19:58 +08:00
SelectedItem="{Binding SelectedFamily}">
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
2025-10-10 11:19:58 +08:00
x:Name="border"
Margin="5"
2024-09-22 11:05:41 +08:00
Background="{TemplateBinding Background}"
BorderBrush="Transparent"
BorderThickness="2"
2025-10-10 11:19:58 +08:00
CornerRadius="5">
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-10-10 11:19:58 +08:00
<Setter TargetName="border" Property="BorderBrush" Value="Gray" />
2024-09-22 11:05:41 +08:00
</MultiTrigger>
<Trigger Property="IsSelected" Value="True">
2025-10-10 11:19:58 +08:00
<Setter TargetName="border" Property="BorderBrush" 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-10-10 11:19:58 +08:00
<Grid Width="170" Height="210">
2024-09-22 11:05:41 +08:00
<Grid.RowDefinitions>
<RowDefinition Height="170" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image
Grid.Row="0"
2025-10-10 11:19:58 +08:00
Width="128"
2024-09-22 11:05:41 +08:00
Height="128"
Source="{Binding ImageData}"
Stretch="Uniform"
2025-10-10 11:19:58 +08:00
ToolTip="{Binding ToolTip}" />
2024-09-22 11:05:41 +08:00
<StackPanel
Grid.Row="0"
HorizontalAlignment="Center"
2025-10-10 11:19:58 +08:00
VerticalAlignment="Bottom"
Orientation="Horizontal">
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-12-23 21:35:54 +08:00
ui:ControlAssist.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-12-23 21:35:54 +08:00
ui:ControlAssist.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"
2025-10-10 11:19:58 +08:00
Width="128"
2024-09-22 11:05:41 +08:00
Text="{Binding Title}"
TextAlignment="Center"
2025-10-10 11:19:58 +08:00
TextWrapping="WrapWithOverflow" />
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
2025-10-10 11:19:58 +08:00
x:Name="scr"
2024-09-22 11:05:41 +08:00
HorizontalScrollBarVisibility="Disabled"
2025-10-10 11:19:58 +08:00
VerticalScrollBarVisibility="Auto">
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
2025-04-24 20:56:44 +08:00
Grid.Row="1"
2025-10-10 11:19:58 +08:00
Grid.Column="3"
Width="1"
2024-09-22 11:05:41 +08:00
HorizontalAlignment="Center"
2025-10-10 11:19:58 +08:00
ShowsPreview="True" />
2025-08-24 13:49:55 +08:00
<DataGrid
2025-10-10 11:19:58 +08:00
Grid.Row="1"
Grid.Column="4"
Margin="5"
d:ItemsSource="{d:SampleData}"
2024-09-22 11:05:41 +08:00
AutoGenerateColumns="False"
CanUserAddRows="False"
IsReadOnly="True"
2026-01-02 16:37:37 +08:00
ItemsSource="{Binding SelectedItem.ParameterDefinitions, ElementName=CbbSymbols, Mode=TwoWay}">
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
2025-04-24 20:56:44 +08:00
Grid.Row="0"
2025-10-10 11:19:58 +08:00
Grid.Column="4"
2024-09-22 11:05:41 +08:00
Orientation="Horizontal">
2025-08-20 12:10:35 +08:00
<ComboBox
2025-10-10 11:19:58 +08:00
x:Name="CbbSymbols"
2025-12-23 21:35:54 +08:00
ui:InputAssist.PlaceholderText="选择族类型"
2025-10-10 11:19:58 +08:00
ui:StackPanel.Fill="Fill"
2024-09-22 11:05:41 +08:00
DisplayMemberPath="Name"
ItemsSource="{Binding SymbolTypes, Mode=TwoWay}"
2025-10-10 11:19:58 +08:00
SelectedItem="{Binding SelectedSymbolType, UpdateSourceTrigger=PropertyChanged}" />
2024-09-22 11:05:41 +08:00
<Button
2025-10-10 11:19:58 +08:00
Grid.Column="1"
Margin="5"
ui:StackPanel.Fill="Auto"
2024-09-22 11:05:41 +08:00
Command="{Binding ImportFamilySymbolCommand}"
Content="&#xEB1F;"
FontFamily="{StaticResource BoxIcons}"
2025-10-10 11:19:58 +08:00
ToolTip="载入类型" />
2025-04-24 20:56:10 +08:00
</ui:StackPanel>
2024-09-22 11:05:41 +08:00
<TextBlock
2025-04-24 20:56:44 +08:00
Grid.Row="2"
2025-10-10 11:19:58 +08:00
Grid.Column="0"
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
2025-04-24 20:56:44 +08:00
Grid.Row="2"
2025-10-10 11:19:58 +08:00
Grid.Column="2"
2024-09-22 11:05:41 +08:00
Message="{Binding Message}" />
2025-08-24 13:49:55 +08:00
2024-09-22 11:05:41 +08:00
<TextBlock
2025-04-24 20:56:44 +08:00
Grid.Row="2"
2025-10-10 11:19:58 +08:00
Grid.Column="4"
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>