[WPF] Уменьшение размеров WebBrowser на форме
От: SergDegun Россия  
Дата: 24.12.10 07:14
Оценка:
На WPF-форме лежат кнопка и под ней WebBrowser. Необходимо, чтобы после щелчка по кнопке у WebBrowser-а верхняя граница плавно съезжала бы вниз на определённое кол-во пикселей. Я сделал так, что в обработчике щелчка по кнопке запускается её анимированное увеличение. Но этот вариант не работает, т. е. кнопка масштабируется, но верхняя граница WebBrowser-а остаётся на месте. Почему?

XAML
<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
  <Window.Resources>
    <Storyboard x:Key="ScaleBrowserUpToDown" TargetName="BrowserUpDownMover">
      <DoubleAnimation Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleY)"
                        Duration="0:0:0.6" From="1" To="4" />
    </Storyboard>
    <Storyboard x:Key="ScaleBrowserDownToUp" TargetName="BrowserUpDownMover">
      <DoubleAnimation Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleY)"
                       Duration="0:0:0.6" From="4" To="1"/>
    </Storyboard>
  </Window.Resources>
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="1*" />
    </Grid.RowDefinitions>
    <Button Grid.Row="0" Name="BrowserUpDownMover" Height="20" Click="BrowserUpDownMover_Click">
      <Button.RenderTransform>
        <ScaleTransform ScaleX="1" ScaleY="1"/>
      </Button.RenderTransform>
    </Button>
    <WebBrowser Grid.Row="1" Name="ContentViewBrowser" Source="C:\Temp\Error.html">
      <WebBrowser.RenderTransform>
        <ScaleTransform ScaleX="1" ScaleY="1"/>
      </WebBrowser.RenderTransform>
    </WebBrowser>
  </Grid>
</Window>


C#
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;

namespace WpfApplication2
{
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();

    }

    private void BrowserUpDownMover_Click(object sender, RoutedEventArgs e)
    {
      ScaleTransform trans = BrowserUpDownMover.RenderTransform as ScaleTransform;
      if (trans != null && trans.ScaleY > 1)
        BrowserUpDownMover.BeginStoryboard((Storyboard)this.Resources["ScaleBrowserDownToUp"]);
      else
        BrowserUpDownMover.BeginStoryboard((Storyboard)this.Resources["ScaleBrowserUpToDown"]);
    }
  }
}
wpf webbrowser
Re: [WPF] Уменьшение размеров WebBrowser на форме
От: MxMsk Португалия  
Дата: 24.12.10 08:06
Оценка:
Здравствуйте, SergDegun, Вы писали:

SD>На WPF-форме лежат кнопка и под ней WebBrowser. Необходимо, чтобы после щелчка по кнопке у WebBrowser-а верхняя граница плавно съезжала бы вниз на определённое кол-во пикселей. Я сделал так, что в обработчике щелчка по кнопке запускается её анимированное увеличение. Но этот вариант не работает, т. е. кнопка масштабируется, но верхняя граница WebBrowser-а остаётся на месте. Почему?

Не ту трансформацию используешь. RenderTransform не учитывается при определении размеров элементов и их компоновке. Оно отвечает за преобразование того, что уже отрендерено. В твоем же случае надо использовать LayoutTransform.
Re[2]: [WPF] Уменьшение размеров WebBrowser на форме
От: SergDegun Россия  
Дата: 24.12.10 11:40
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Не ту трансформацию используешь. RenderTransform не учитывается при определении размеров элементов и их компоновке. Оно отвечает за преобразование того, что уже отрендерено. В твоем же случае надо использовать LayoutTransform.


Спасибо. Нашёл другое решение задачи:

<Window x:Class="WpfApplication2.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="MainWindow" Height="350" Width="525">
 <Window.Resources>
 <Storyboard x:Key="ScaleBrowserUpToDown" TargetName="BrowserUpDownMover">
  <DoubleAnimation Storyboard.TargetProperty="Height"
      Duration="0:0:0.6" From="20" To="40" />
 </Storyboard>
 <Storyboard x:Key="ScaleBrowserDownToUp" TargetName="BrowserUpDownMover">
  <DoubleAnimation Storyboard.TargetProperty="Height"
      Duration="0:0:0.6" From="40" To="20"/>
 </Storyboard>
 </Window.Resources>
 <Grid>
 <Grid.RowDefinitions>
  <RowDefinition Height="Auto" />
  <RowDefinition Height="1*" />
 </Grid.RowDefinitions>
 <Button Grid.Row="0" Name="BrowserUpDownMover" Height="20" Click="BrowserUpDownMover_Click">
 </Button>
 <WebBrowser Grid.Row="1" Name="ContentViewBrowser" Source="C:\Temp\Error.html">
 </WebBrowser>
  </Grid>
</Window>



using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;

namespace WpfApplication2
{
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();

    }

    private void BrowserUpDownMover_Click(object sender, RoutedEventArgs e)
    {
      if (BrowserUpDownMover.Height > 20)
        BrowserUpDownMover.BeginStoryboard((Storyboard)this.Resources["ScaleBrowserDownToUp"]);
      else
        BrowserUpDownMover.BeginStoryboard((Storyboard)this.Resources["ScaleBrowserUpToDown"]);
    }
  }
}
Re[3]: [WPF] Уменьшение размеров WebBrowser на форме
От: MxMsk Португалия  
Дата: 24.12.10 11:58
Оценка:
Здравствуйте, SergDegun, Вы писали:

SD>Спасибо. Нашёл другое решение задачи:

Если оно решает задачу, то оно лучше. Кстати, в обеих анимациях свойство From можно не указывать. И проверять, какую анимация запускать, лучше все-так без magic number.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.