[WPF] Просмотр содержимого одного окна в другом
От: Ziaw Россия  
Дата: 13.05.11 10:41
Оценка:
Задача — скроллировать текст в одном большом окне. Осложняется тем, что одновременно на другом мониторе должно находиться управляющее окно в котором есть небольшой контрол показывающий содержимое большого окна. Есть конечно путь в лоб, рисовать то же самое, вычисляя и задавая, нужный масштаб. Но может есть более простые способы?

В WPF я новичок, если единственный метод — в лоб, буду благодарен любым советам по реализации.
Re: [WPF] Просмотр содержимого одного окна в другом
От: MxMsk Португалия  
Дата: 13.05.11 10:48
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Задача — скроллировать текст в одном большом окне. Осложняется тем, что одновременно на другом мониторе должно находиться управляющее окно в котором есть небольшой контрол показывающий содержимое большого окна. Есть конечно путь в лоб, рисовать то же самое, вычисляя и задавая, нужный масштаб. Но может есть более простые способы?

Я не понял, в чем задача? Показывать одно окно в другом или скролливать текст? Как насчет VisualBrush?
Re[2]: [WPF] Просмотр содержимого одного окна в другом
От: Ziaw Россия  
Дата: 14.05.11 03:00
Оценка:
Здравствуйте, MxMsk, Вы писали:

Z>>Задача — скроллировать текст в одном большом окне. Осложняется тем, что одновременно на другом мониторе должно находиться управляющее окно в котором есть небольшой контрол показывающий содержимое большого окна. Есть конечно путь в лоб, рисовать то же самое, вычисляя и задавая, нужный масштаб. Но может есть более простые способы?


MM>Я не понял, в чем задача? Показывать одно окно в другом или скролливать текст? Как насчет VisualBrush?


Есть одно окно в котором я уже умею скроллировать текст. Нужно еще одно окно которое одновременно показывает что-то типа thumba первого в реальном времени. Как это умеет делать Windows 7 на всякие видеоплееры в таскбаре. Вопрос в заключается в том, чтобы понять: отрисовывать

P.S. Текст я скролирую просто применяя DoubleAnimation к координатам текста, нормальная практика? Бывают иногда подергивания, причем это не зависит от мощности компа явно. Кто нибудь знает как от них избавиться?
Re[3]: [WPF] Просмотр содержимого одного окна в другом
От: MxMsk Португалия  
Дата: 14.05.11 06:57
Оценка: 21 (1)
Здравствуйте, Ziaw, Вы писали:

Z>Есть одно окно в котором я уже умею скроллировать текст. Нужно еще одно окно которое одновременно показывает что-то типа thumba первого в реальном времени. Как это умеет делать Windows 7 на всякие видеоплееры в таскбаре. Вопрос в заключается в том, чтобы понять: отрисовывать

Используй VisualBrush. Например, можно сделать такое окно:
public partial class ThumbnailWindow : Window
{
    public ThumbnailWindow(Visual source)
    {
        InitializeComponent();
        this.Background = new VisualBrush(source);
    }
}

В его фон будет вписываться содержимое элемента, который ты передашь в конструктор. Window унаследован от Visual, так что сможешь и его передать.

Z>P.S. Текст я скролирую просто применяя DoubleAnimation к координатам текста, нормальная практика? Бывают иногда подергивания, причем это не зависит от мощности компа явно. Кто нибудь знает как от них избавиться?

К сожалению, с анимациями я практически не сталкиваюсь. Боюсь подергивания не исправить. Кажись WPF что-то хитрит при скроллинге текста, делая его немного расплывчатым. Думаю, именно это и создает эффект задержки. Впрочем, может я и ошибаюсь.
Re[4]: [WPF] Просмотр содержимого одного окна в другом
От: Ziaw Россия  
Дата: 14.05.11 12:23
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Кажись WPF что-то хитрит при скроллинге текста, делая его немного расплывчатым. Думаю, именно это и создает эффект задержки. Впрочем, может я и ошибаюсь.


А что, есть штатный скролинг текста? Или просто добавить невидимый скролбар и им скролить? Сейчас я просто меняю координату встроенной анимацией. Надо еще попробовать вручную в отдельном потоке.
Re[5]: [WPF] Просмотр содержимого одного окна в другом
От: vit_as Россия  
Дата: 14.05.11 15:54
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, MxMsk, Вы писали:


MM>>Кажись WPF что-то хитрит при скроллинге текста, делая его немного расплывчатым. Думаю, именно это и создает эффект задержки. Впрочем, может я и ошибаюсь.


Z>А что, есть штатный скролинг текста? Или просто добавить невидимый скролбар и им скролить? Сейчас я просто меняю координату встроенной анимацией. Надо еще попробовать вручную в отдельном потоке.


По-моему будет лучше размещать текст в ScrollViewer'e, если конечно небольшой объем (при большом объеме нужна будет виртуализация).
Можно переопределить стиль ScrollViewer'a, и в анимации менять свойство VerticalOffset.
Re[5]: [WPF] Просмотр содержимого одного окна в другом
От: MxMsk Португалия  
Дата: 14.05.11 16:16
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>А что, есть штатный скролинг текста? Или просто добавить невидимый скролбар и им скролить? Сейчас я просто меняю координату встроенной анимацией. Надо еще попробовать вручную в отдельном потоке.

Насколько я понимаю, анимацию к тексту лучше применять через TextEffects:
<DockPanel>
    <Button>Animate
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="Text"
                                            Storyboard.TargetProperty="TextEffects[0].Transform.Y"
                                            To="0"
                                            Duration="00:00:3"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>
    <TextBlock Name="Text">
        <TextBlock.TextEffects>
            <TextEffect PositionCount="14">
                <TextEffect.Transform>
                    <TranslateTransform Y="300"/>
                </TextEffect.Transform>
            </TextEffect>
        </TextBlock.TextEffects>
        Text to scroll
    </TextBlock>
</DockPanel>

Заодно попробуй для TextBlock выставить свойство SnapsToDevicePixels в True.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.