2014-03-21 3 views
3

В настоящее время я работаю над приложением с использованием WPF. И я не могу не заметить разницу в функциональности ScrollViewer по сравнению с вариантом приложения Windows Store.C# wpf scrollviewer не работает как приложение для магазина Windows

Когда я нахожусь на краю экрана и краю ScrollViewer, и я хочу скользить, чтобы я отошел от края. Я вижу рабочий стол Windows или панель меню (в нижней части экрана). Есть ли решение предотвратить это поведение прокрутки? Это довольно раздражает (и уродливо!), Когда вы прокручиваетесь до края экрана, а затем натыкаетесь назад и видите под ним небольшую платформу для окон. Это поведение исправлено в приложении Windows App App ScrollViewer.

Я попытался перезаписать и проверить, нет ли f.e. horizontalOffset == 0 && horizontalChange < 0 и верните, если это так. Но эта проверка, похоже, не работает (с тех пор, наверное, уже слишком поздно). И я не могу найти способ, которым Windows Store Apps исправили это.

enter image description here

Может быть, вы, ребята есть идея?


EDIT: Размножение для проектов WPF в .NET 4.5.1

Эта часть XAML воссоздает мою проблему в WPF. Однако в приложении Windows Store проблема не существует.

Как предотвратить это поведение при прокрутке и/или по краям приложения?

<Window x:Class="WpfApplication1.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" ResizeMode="NoResize" WindowState="Maximized" WindowStyle="None"> 
    <Grid> 
     <ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" PanningMode="Both"> 
      <Rectangle Height="2500" Stroke="Black" Width="3500" HorizontalAlignment="Left" VerticalAlignment="Top"> 
       <Rectangle.Fill> 
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0,0.5"> 
         <GradientStop Color="#FF00FF68" Offset="0"/> 
         <GradientStop Color="Red" Offset="1"/> 
         <GradientStop Color="#FF95FF00" Offset="0.506"/> 
        </LinearGradientBrush> 
       </Rectangle.Fill> 
      </Rectangle> 
     </ScrollViewer> 

    </Grid> 
</Window> 
+0

Не могли бы вы предоставить скриншот описанного вами поведения? – Dutts

+0

@ Рихард обновлен для уточнения. Слева вы видите край моего приложения. И он автоматически генерирует эту ужасную строку меню. Оба поведения нежелательны, и оба они происходят только в WPF, а не в Windows Store Apps. –

+0

А я понимаю, о чем вы говорите, какова ценность WindowState для вашего приложения? – Dutts

ответ

3

Это поведение Windows 8 по умолчанию, связанное с прокруткой. Ваше приложение будет «отскакивать», если вы нажмете край прокрутки. Это происходит в каждом отдельном случае и является частью системных анимаций. Вы можете увидеть это, например, в проводнике Windows, когда в длинном списке папок. Это происходит только при прокрутке по прикосновению и, если я правильно помню, в не-полноэкранных приложениях. В настоящее время у меня нет доступа к машине под Windows 8, чтобы проверить это требование , и, возможно, очень не удастся отключить это поведение .

Современная среда - совершенно отдельная среда приложения и не обрабатывает сенсорные жесты одинаковым образом. Вот почему это поведение не существует в приложении WinRT.

EDIT: Этот эффект называется обращением границы манипуляции. Это срабатывает, когда событие манипуляции выходит за пределы его контейнера. Вы можете отключить его переопределение метода OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs) на пораженный UIElement так:

class NoTouchFeedbackWindow : Window 
{ 
    protected override void OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs e) 
    { 
     e.Handled = true; 
    } 
} 

Это также может быть сделано непосредственно на ScrollViewer или какого-либо контроля вверх по цепочке.

Вы можете найти более подробную информацию об этом поведении на:

Будем надеяться, что это должно решить проблему.

+0

Ммм .. Значит, ты говоришь, что это может быть не разрешимо вообще. Я могу подтвердить одно и то же поведение для полноэкранных приложений и Windows7, если это какая-либо копия справки. Таким образом, это может быть остатком их первых решений для решения проблем интерфейса. –

+0

Я обновил ответ с дополнительной информацией о поведении и его отключении. –

+0

Вот оно! И, оказывается, это действительно легко реализовать. Как вы узнали, что это было? –

Смежные вопросы