2015-07-13 7 views
-1

Так что я работаю с WPF Infragistics XamDockManager и PaneToolWindow.Infragistics PaneToolWindow Window DragMove - Spooky Результаты

Я рестайлинг хром PaneToolWindow с обычным XamRibbonWindow.

I have managed to do this successfully. Если это сделано, то PaneToolWindow теряет способность к наркотикам.

Решение состоит в том, чтобы переопределить функциональность перетаскивания (как моя оценка, так и recommendation from Infragistics). Однако, к сожалению, для меня и для всех пользователей инструментария Infragistics WPF почти нулевая документация и примеры того, как это сделать. Один из примеров того, что infragistics действительно обеспечивает, глючит, если не сказать больше.

Установка:

Это мой заказ Dock менеджер

public class CustomDockManager : XamDockManager 
{ 
    protected override PaneToolWindow CreatePaneToolWindow() 
    { 
     return new CustomPaneToolWindow() as PaneToolWindow; 
    } 
} 

Это мой обычай PaneToolWindow

public class CustomPaneToolWindow : PaneToolWindow 
{ 
    private Point _MouseClickPoint { get; set; } 
    private Boolean _IsMouseDown { get; set; } 

    public CustomPaneToolWindow() 
    { 
     this.MouseLeftButtonDown += CustomPaneToolWindow_MouseLeftButtonDown; 
    } 

    private void CustomPaneToolWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    {   
     if (e.LeftButton == MouseButtonState.Pressed) 
     { 
     this._IsMouseDown = true; 
     this._MouseClickPoint = e.GetPosition(this as UIElement); 
     } 
     else 
     { 
     this._IsMouseDown = false; 
     } 
    } 

    protected override void OnMouseMove(MouseEventArgs e) 
    { 
     //Need to move the window around here. 
    } 
    } 

Теперь я попытался простой и переехал к сложному.

Во-первых, я пробовал делать что-то подобное.

public Window _WindowOfCustomToolPaneWindow { get { return Window.GetWindow(this); } } 

    public CustomPaneToolWindow() 
    { 
    this._WindowOfCustomToolPaneWindow.MouseLeftButtonDown 
     +=CustomPaneToolWindow_MouseLeftButtonDown; 
    } 

    private void CustomPaneToolWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
    this._WindowOfCustomToolPaneWindow.DragMove(); 
    } 

Можно было бы подумать, что это возвращает окно, которое плавает вокруг и содержит this правильно? Вы ошибаетесь. Фактически он возвращает родительское окно. Это вызывает вызов DragMove() для отправки дочернего окна, летящего с экрана.

Так к следующему ...

protected override void OnMouseMove(MouseEventArgs e) 
{ 
    Point cachedPoint = e.GetPosition(this as UIElement); 
    if (this._IsMouseDown && cachedPoint != this._MouseClickPoint) 
    { 
     Vector delta = Point.Subtract(this._MouseClickPoint, cachedPoint); 

     this.Left -= delta.X; 
     this.Top -= delta.Y; 

     this._MouseClickPoint = cachedPoint; 

     this._IsMouseDown = false; 
    } 
    } 

Это немного более пространно попытке переместить окно вокруг. К сожалению, это тоже не работает. Я думаю, что он корректирует поля UserControl внутри окна, а не перемещает само окно.

Я нахожусь в убытке. Отсутствие поддержки от Infragistics по этой теме вызывает беспокойство, если не сказать больше.

Есть ли у кого-нибудь идеи о том, как разрешить это?

+0

Какая версия Infragistics у вас есть? У вас есть соглашение о поддержке с ними вместо того, чтобы использовать поддержку сообщества? У вас есть полный проект, показывающий поведение с абсолютным минимальным кодом, необходимым для показа поведения? Это то, что я должен был сделать, чтобы получить более подробный ответ от них. – SteveFerg

+0

Да ко всему вышесказанному. Тем не менее, почему-то я все еще здесь, ловя общественную помощь ..... –

ответ

1

Внутренне в случае PaneToolWindow сопротивления, Infragistics ищет UIElement под названием «PART_Caption»

, добавив рамку вокруг моего XamRibbonWindow и придавая ему x:Name="PART_Caption" это решить проблему.

<Style TargetType="{x:Type igDock:PaneToolWindow}" x:Key="DockPTW"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type igDock:PaneToolWindow}"> 
        <Border x:Name="PART_Caption" BorderThickness="4" Background="Red"> 
        <igRibbon:RibbonWindowContentHost> 

         <igRibbon:RibbonWindowContentHost.Ribbon> 
          <igRibbon:XamRibbon x:Name="MAIN_RIBBON" DockPanel.Dock="Top"> 

          </igRibbon:XamRibbon> 
         </igRibbon:RibbonWindowContentHost.Ribbon> 
         <Grid Width="1000" Height="500"> 


         </Grid> 
        </igRibbon:RibbonWindowContentHost> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style>