2011-12-28 33 views
0

我正在制作一个类似于PowerPoint的程序,用于更改显示生产数据的某些幻灯片。我正在处理通常出现在屏幕左侧的幻灯片选择器部分。您选择一张幻灯片,并在我的网格的主要部分显示较大的幻灯片。我制作了其他页面的幻灯片模板,我以帧为主机。注意:使用C#在列表框中选定项目的框架部分,类似于PowerPoint幻灯片选择器

做幻灯片选择,我做了以下的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。每个框架通过绑定到数据模板中的SlideURL导航到它的幻灯片模板。

我的问题是,这会显示堆叠在列表框中的交互式页面,我只能通过单击该项目的边框来选择该项目。我不希望它们在列表框中处于交互状态,我只是希望它成为幻灯片的图片,并在更改时更新。有没有办法显示框架,但没有启用它,并点击它在列表框中选择该项目?

奖励积分:当我将这些参数添加到列表中时,将参数传递给这些页面。

回答

0

取代托管框架,您可以托管运行时生成的框架图像。真的,你可以做的是在你的Slide对象中存储一个图像属性,如果一个属性发生了变化,偶尔会更新一个图像属性,并将图像控件绑定到该属性上。

您可以很容易地从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成矩形填充的图像刷:

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

你可以拥有的BitmapSource作为阶级属性,并传递通过转换器(凌乱在我看来)或者你可以有一个ImageBrush类型的属性来代替(最好的methinks)。

+0

嗯,我在C#中工作,所以我将不得不尝试翻译你的语法 – JonD 2011-12-28 17:56:19

+0

kk,我已经修改了所有的语法,所以你认为我可以通过页面作为一个元素,并得到它? – JonD 2011-12-28 18:34:13

+0

我猜它不是那么简单: bitmapImage = GetBitmapSource(myPageView.xaml); – JonD 2011-12-28 18:41:49

0

为什么不尝试在“框架”顶部添加一个填充的矩形,并设置尽可能低的alpha以查看您的框架。像那样,鼠标将与矩形进行交互。

+0

我该如何在上面添加一个矩形?你有代码片段吗? – JonD 2011-12-28 17:52:19

+0

2011-12-29 12:35:01

+0

问题:为什么要指定高度/宽度只要它在列表框中?它应该得到listboxitem的大小,其余的将被裁剪我猜。 – 2011-12-29 12:36:18