Создание части кадра выбранного элемента в списке, аналогично селектору слайдов PowerPoint - PullRequest
0 голосов
/ 28 декабря 2011

Я делаю программу, похожую на 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}"/>

Предметы добавляются через наблюдаемую коллекцию, связанную с источником предметов. Каждый кадр перемещается к своему шаблону слайда через привязку к SlideURL в шаблоне данных.

Моя проблема в том, что при этом отображаются интерактивные страницы, сложенные в списке, и я могу выбрать только элемент, нажав на границу элемента. Я не хочу, чтобы они были интерактивными в списке, я просто хочу, чтобы это было изображение слайда, которое обновляется по мере его изменения. Есть ли способ показать рамку, но не включить ее, и щелкнуть по ней, чтобы выбрать этот элемент в списке?

Бонусные баллы: передача параметров на эти страницы, когда я добавляю их в список.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2011

Вместо размещения фреймов вы можете вместо этого размещать сгенерированные во время выполнения изображения фрейма.На самом деле вы можете сохранить в свой объект 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 вместо этого (желательно метинкс).

0 голосов
/ 28 декабря 2011

Почему бы вам не попытаться добавить поверх «Рамки» прямоугольник, заполненный альфа-каналом, установленным как можно ниже, чтобы видеть сквозь рамку.Таким образом, мышь будет взаимодействовать с прямоугольником.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...