Adorner-слой в WPF или Как правильно отнаследоваться
От: Пушкин Россия  
Дата: 13.03.11 09:50
Оценка:
Пишу простенькую программу (WPF) — игру Паззлы. Застопорился на том что не могу вытащить из нижнего Scrollviewer Adorner-слой. Гугл не помог.


Основная структура юзер-интерфейса:

-Grid
--Scrollviewer
---Canvas — принимает картинку
--Scrollviewer
---Wrappanel — содержит много картинок, которые перетаскиваются на канвас
----Image's

<ScrollViewer Name="scrollJagsawPuzzle" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0">
                    <Grid>
                       <Canvas Name="dest" />
                    </Grid>
                </ScrollViewer>
                <ScrollViewer Name="scrollViewer2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="2" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
                    <WrapPanel x:Name="panelPieces" Orientation="Horizontal" Height="Auto" Width="Auto" />
                </ScrollViewer>


Основная суть проблемы: Адорнер-слой скрывается за границами скроллвью.
Есть предположение, что нужно как-то верно отнаследоваться

Может кто знает как эту проблему можно решить ? (Для работы аттача нужно скопировать JPG в папку C:\Image)
Re: Adorner-слой в WPF или Как правильно отнаследоваться
От: Пушкин Россия  
Дата: 13.03.11 09:53
Оценка:
не знаю как прикреплять файлы думаю, ссылкой http://files.rsdn.ru/96257/WpfApplication2.7z
Re: Adorner-слой в WPF или Как правильно отнаследоваться
От: Vladek Россия Github
Дата: 16.03.11 02:15
Оценка:
Здравствуйте, Пушкин, Вы писали:

П>Пишу простенькую программу (WPF) — игру Паззлы. Застопорился на том что не могу вытащить из нижнего Scrollviewer Adorner-слой. Гугл не помог.



П>Основная структура юзер-интерфейса:


Должна быть такой:

ItemsControl
ItemsSource: привязываем коллекцию объектов паззлов, хранящих всякую полезную информацию
ItemTemplate: красочно описываем паззлы (используем тот Image), используем биндинги к свойствам класса паззлов
ItemsPanel: указываем какую-нибудь анимационную а-ля WrapPanel, умеющую красиво перетаскивать элементы с места на место и хранящую информацию о позиции элемента в attached-свойстве.
ItemContainerStyle: делаем биндинг attached-свойства панели к свойству класса паззла
Template: красочно описываем игровое поле (фигачим всякие ScrollViewer-ы и адорнеры, не забывая вставить в нужном месте ItemsPresenter).

Проблемы с адорнерами и прочими примитивнейшими визуальными элементами не возникают вообще, потому что мы решали задачу на правильном уровне абстракции. И Гугл уже рад нам помочь.
Re[2]: Adorner-слой в WPF или Как правильно отнаследоваться
От: Пушкин Россия  
Дата: 18.03.11 08:00
Оценка:
Здравствуйте, Vladek, Вы писали:

V>Здравствуйте, Пушкин, Вы писали:


П>>Пишу простенькую программу (WPF) — игру Паззлы. Застопорился на том что не могу вытащить из нижнего Scrollviewer Adorner-слой. Гугл не помог.



П>>Основная структура юзер-интерфейса:


V>Должна быть такой:


V>ItemsControl

V> ItemsSource: привязываем коллекцию объектов паззлов, хранящих всякую полезную информацию
V> ItemTemplate: красочно описываем паззлы (используем тот Image), используем биндинги к свойствам класса паззлов
V> ItemsPanel: указываем какую-нибудь анимационную а-ля WrapPanel, умеющую красиво перетаскивать элементы с места на место и хранящую информацию о позиции элемента в attached-свойстве.
V> ItemContainerStyle: делаем биндинг attached-свойства панели к свойству класса паззла
V> Template: красочно описываем игровое поле (фигачим всякие ScrollViewer-ы и адорнеры, не забывая вставить в нужном месте ItemsPresenter).

V>Проблемы с адорнерами и прочими примитивнейшими визуальными элементами не возникают вообще, потому что мы решали задачу на правильном уровне абстракции. И Гугл уже рад нам помочь.


1.В общем то понял (да и погуглил по ответу), но не совсем:
V> ItemsPanel: указываем какую-нибудь анимационную а-ля WrapPanel, умеющую красиво перетаскивать элементы с места на место и хранящую информацию о позиции элемента в attached-свойстве.
Сколько не смотрел в интернетах, ни разу такого не встречал.

2.А можно простенький пример описанного на XAML? Буду благодарен
Re[3]: Adorner-слой в WPF или Как правильно отнаследоваться
От: Vladek Россия Github
Дата: 20.03.11 08:38
Оценка: 3 (1)
Здравствуйте, Пушкин, Вы писали:

П>1.В общем то понял (да и погуглил по ответу), но не совсем:

V>> ItemsPanel: указываем какую-нибудь анимационную а-ля WrapPanel, умеющую красиво перетаскивать элементы с места на место и хранящую информацию о позиции элемента в attached-свойстве.
П>Сколько не смотрел в интернетах, ни разу такого не встречал.

Встречаются, но скорее всего придётся писать что-то своё.

П>2.А можно простенький пример описанного на XAML? Буду благодарен


Скачать пример пятнашек с описанной структурой интерфейса можно здесь. В качестве панели для поля с костяшками использован обычный Grid.

Вот весь значимый XAML:
<Window x:Class="PuzzleDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:puzzle="clr-namespace:PuzzleDemo.Data"
        Title="Пятнашки"
        Height="350"
        Width="525">
 <Grid>
  <ItemsControl ItemsSource="{Binding}">
   <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
     <Grid ShowGridLines="True">
      <Grid.RowDefinitions>
       <RowDefinition Height="*" />
       <RowDefinition Height="*" />
       <RowDefinition Height="*" />
       <RowDefinition Height="*" />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>
     </Grid>
    </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
    <DataTemplate DataType="{x:Type puzzle:Tile}">
     <TextBlock HorizontalAlignment="Center"
                VerticalAlignment="Center"
                FontSize="26pt"
                Text="{Binding OrderNumber}" />
    </DataTemplate>
   </ItemsControl.ItemTemplate>
   <ItemsControl.ItemContainerStyle>
    <Style TargetType="{x:Type FrameworkElement}">
     <Setter Property="Grid.Row"
             Value="{Binding PlaceNumber, Converter={puzzle:TileNumberConverter}, ConverterParameter=Row}" />
     <Setter Property="Grid.Column"
             Value="{Binding PlaceNumber, Converter={puzzle:TileNumberConverter}, ConverterParameter=Column}" />
    </Style>
   </ItemsControl.ItemContainerStyle>
  </ItemsControl>
 </Grid>
</Window>
Re[4]: Adorner-слой в WPF или Как правильно отнаследоваться
От: Пушкин Россия  
Дата: 14.09.11 08:08
Оценка:
Спасибо, Vladek. Полгода изучения (читай:мучения) WPF и я написал курсовик. Но, конечно, не на чистом WPFe а по большей части с программными вставками. вроде даже норм получилось

Спасибо ещё раз )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.