怡情 发表于 2026-1-10 22:48:06

功能简单的块库


弄了一个能自己随意折腾的块库,提取当前图纸的块来进行块的插入,可以进行搜索,加强了信息密度,预览图做的小不过也能看看,名字也很小,在小屏幕笔记本上也能一下显示好几个待选,也能随着界面的大小自动排列合适数量的预览图。
方法就是用一个ScrollViewer包自定义的按钮,按钮内部可以绑定块的预览图,再绑好命令,闲的可以再优化下鼠标滚动能翻一整页的逻辑。
预览图这块高版本有自带的方法,可怜的低版本像这个2012并没有,如果不做处理,用自带的块预览图效果会很模糊,不过没关系,也有其它的方法可以生成清楚点的预览图再塞给块,只是要麻烦点,我参考的blockview,不知道各位大佬对于低版本做预览图这块有没有更好的办法。
其他什么比例角度的暂时没啥需求也就不弄了。

下面是右侧块展示区域的XAML,供参考,丢给AI说不定也就折腾出来了。
<!--右侧自适应块展示-->
<ScrollViewer
    x:Name="BlockScroller" Grid.Column="2" PreviewMouseWheel="BlockScroller_PreviewMouseWheel" VerticalScrollBarVisibility="Auto">
    <ItemsControl ItemsSource="{Binding 当前图纸块集合}">
      <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel HorizontalAlignment="Stretch" Orientation="Horizontal" />
            </ItemsPanelTemplate>
      </ItemsControl.ItemsPanel>

      <ItemsControl.ItemContainerStyle>
            <Style TargetType="ContentPresenter">
                <Setter Property="HorizontalAlignment" Value="Left" />
                <Setter Property="VerticalAlignment" Value="Top" />
            </Style>
      </ItemsControl.ItemContainerStyle>

      <!--卡片模板-->
      <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button
                  Width="60" Height="80" Margin="2" Padding="0"
                  VerticalContentAlignment="Top" Background="#60000000" BorderBrush="#E0E0E0" BorderThickness="1"
                  Command="{Binding DataContext.InsertBlockCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
                  CommandParameter="{Binding}"
                  Cursor="Hand">
                  <Button.Style>
                        <Style BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" TargetType="Button">
                            <Setter Property="Template">
                              <Setter.Value>
                                    <ControlTemplate TargetType="Button">
                                        <Border
                                          x:Name="border"
                                          Background="{TemplateBinding Background}"
                                          BorderBrush="{TemplateBinding BorderBrush}"
                                          BorderThickness="{TemplateBinding BorderThickness}"
                                          SnapsToDevicePixels="True">
                                          <DockPanel LastChildFill="True">
                                                <Image
                                                    Width="60" Height="60" DockPanel.Dock="Top"
                                                    Source="{Binding 块缩略图}"
                                                    Stretch="Uniform" />
                                                <TextBlock
                                                    x:Name="txt" Margin="1" FontSize="8" FontWeight="ExtraBold"
                                                    Foreground="WhiteSmoke" LineHeight="8" LineStackingStrategy="BlockLineHeight"
                                                    Text="{Binding 块名}"
                                                    TextAlignment="Center" TextWrapping="Wrap" />
                                          </DockPanel>
                                        </Border>

                                        <ControlTemplate.Triggers>
                                          <Trigger Property="IsMouseOver" Value="True">
                                                <Setter TargetName="txt" Property="FontSize" Value="9" />
                                          </Trigger>
                                        </ControlTemplate.Triggers>
                                    </ControlTemplate>
                              </Setter.Value>
                            </Setter>
                        </Style>
                  </Button.Style>
                </Button>
            </DataTemplate>
      </ItemsControl.ItemTemplate>

      <!--空状态提示-->
      <ItemsControl.Template>
            <ControlTemplate TargetType="ItemsControl">
                <Grid>
                  <ItemsPresenter />
                  <TextBlock
                        Margin="20" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="ExtraBold"
                        Foreground="#000" Text="暂无块数据"
                        Visibility="{Binding Items.Count, RelativeSource={RelativeSource AncestorType=ItemsControl}, Converter={StaticResource CountToVisibilityConverter}}" />
                </Grid>
            </ControlTemplate>
      </ItemsControl.Template>
    </ItemsControl>
</ScrollViewer>

怡情 发表于 2026-1-10 23:01:04

论坛打开gif附件好像很慢。。。补个截图吧

chenlianghuai 发表于 2026-1-11 13:30:28

nice,学习学习

lcchn 发表于 2026-1-12 11:19:28

6666666666

tranque 发表于 2026-1-12 23:35:03

其实gif和视频一样也能剪辑的,录制的时候,设置一下,还有后期处理时候调一下,gif文件会小很多

怡情 发表于 2026-1-13 08:33:17

tranque 发表于 2026-1-12 23:35
其实gif和视频一样也能剪辑的,录制的时候,设置一下,还有后期处理时候调一下,gif文件会小很多

在上传限制大小以内,只有3M多,不应该要转很久的圈,转出的时候已经是用的最低画质了...
页: [1]
查看完整版本: 功能简单的块库