在列表框中使框架成为选定项的一部分,类似于PowerPoint幻灯片选择器

本文关键字:一部分 类似于 选择器 幻灯片 PowerPoint 列表 框架 | 更新日期: 2023-09-27 18:18:53

我正在编写一个类似于powerpoint的程序,用于更改显示生产数据的一些幻灯片。我正在工作的幻灯片选择器部分,通常出现在屏幕的左侧。你选择一张幻灯片,它会在我的网格的主要部分显示得更大。我从其他页面制作了幻灯片模板,我把它们放在框架中。注意:使用c#

为了做幻灯片选择器,我用下面的DataTemplate创建一个列表框:

    <DataTemplate x:Key="SlideSelector">
        <Border BorderBrush="Silver" BorderThickness="1" Padding="3" CornerRadius="5" Height="120" Width="200">
            <Viewbox>
                <Frame Height="656" Width="1360"  Source ="{Binding Path=SlideURL}"/>
            </Viewbox>
            </Border>
     </DataTemplate>

列表框:

<ListBox Name="SlideSelectorListBox" SelectedItem="{Binding SelectedSlide}" ItemsSource="{Binding Path=Slides}" ItemTemplate="{StaticResource SlideSelector}"/>

项是通过绑定到itemsource的可观察集合添加的。每个Frame通过绑定到数据模板中的SlideURL导航到它的幻灯片模板。

我的问题是,这显示了堆叠在列表框中的交互式页面,我只能通过单击项目的边框来选择项目。我不想让它们在列表框上互动,我只想让它是幻灯片的图片,当它们改变时它会更新。是否有一种方法可以显示框架,但不启用它,并让点击它选择列表框中的项目?

附加功能:当我将这些页面添加到列表中时,将参数传递给它们。

在列表框中使框架成为选定项的一部分,类似于PowerPoint幻灯片选择器

与其托管框架,不如托管运行时生成的框架图像。你能做的就是在你的幻灯片对象上存储一个图像属性当属性改变时它会偶尔更新并绑定一个图像控件到它上面。

您可以很容易地从wpf元素创建图像。

    Public Shared Function GetBitmapSource(ByVal element As FrameworkElement) As BitmapSource
        Dim visual As New DrawingVisual()
        Dim context As DrawingContext = visual.RenderOpen()
        Dim elementBrush As New VisualBrush(element)
        Dim w As Integer = CInt(element.ActualWidth)
        Dim h As Integer = CInt(element.ActualHeight)
        context.DrawRectangle(elementBrush, Nothing, New Rect(0, 0, w, h))
        context.Close()
        Dim bitmap As New RenderTargetBitmap(w, h, 96, 96, PixelFormats.[Default])
        bitmap.Render(visual)
        Return bitmap
    End Function

使用时,将BitmapSource拉入矩形填充中作为imagebrush:

Me.rectFormPreview.Fill = New ImageBrush(_objViewFolders(Me.lbFormList.SelectedIndex).ViewBitmapSource)

你可以将BitmapSource作为类的属性,并通过转换器传递它(在我看来很乱),或者你可以使用ImageBrush类型的属性来代替(我认为更可取)。

为什么不尝试在"Frame"的顶部添加一个填充的矩形,将alpha值设置得尽可能低,以便通过框架看到。这样,鼠标将与矩形交互