none
開於form → wpf 的過渡問題 RRS feed

解答

  • 有個小誤差, Window 類型的物件是不能使用 Rendertransform 屬性的. 不過還是可以做 ( Window 對 Screen 是絕對定位), 例子如下:

    <Window x:Name="window" x:Class="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" Left="0" Top="0">
    	<Window.Resources>
    		<Storyboard x:Key="Storyboard1">
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="window">
    				<SplineDoubleKeyFrame KeyTime="0" Value="0"/>
    				<SplineDoubleKeyFrame KeyTime="0:0:0.5" Value="30"/>
    				<SplineDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>
    	</Window.Resources>
        <Grid>                                           
            <Button Content="Move" Click="Button_Click" Height="100" Width="100" />
        </Grid>
    </Window>

    Imports System.Windows.Media.Animation
    
    Class MainWindow
    
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
            DirectCast(Me.Resources("Storyboard1"), Storyboard).Begin()
        End Sub
    End Class


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2016年3月1日 上午 07:23
    版主
  • 對不起,我好像搞錯了一些東西。應該問原來的東西被什麼代替了才對。

    ''以下是筆記=======

    Window Form


    me.location.x
    me.location.y
    me.size.width
    me.size.height
    Public Shared ReadOnly Sc As Point =System.Windows.Forms.SystemInformation.PrimaryMonitorSize



    WPF

    me.left
    me.top
    me.Width
    me.Height
    Public Shared ReadOnly Sc As Point = New Point(SystemParameters.PrimaryScreenWidth, SystemParameters.PrimaryScreenHeight)







    2016年3月2日 上午 01:59

所有回覆

  • WPF 和 Windows Forms 有很大的不同. WPF 控制項的定位方式一般是相對於容器, 例如使用 Margin, verticalalignment, horizontalalignment 等等 .

    在 WPF 中, 只有Canvas 容器內的控制項是使用絕對定位的. 但通常我們的設計都採用相對定位, 這樣才能確保在螢幕解析度不同的狀態下還能保持美觀的控制項排列.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2016年2月29日 上午 08:58
    版主
  • 我剛碰到的問題。

    Form只能放 grid(預設)、Canvas 這種容器,放其他東西會消失。

    現在目的是: 我想移動Form,不想動裡面的Obj。

    me.location= me.location - new point (30,30),是針對form的,

    那麼,我該用回Grid?還是改用Canvas?

    2016年2月29日 上午 09:05
  • 當然不是叫你把 Grid 換成 Canvas, 而是要採用 "相對位置" 來設計.

    寫 Windows Forms 的人習慣於從工具箱拉控制項到容器上, 寫 WPF 剛開始因為不熟悉可能也會這麼做, 但其實寫  WPF 最有效率的是直接編輯 XAML 檔, 因為直接拉控制項下來會依據你擺放的位置修改 Margin, 所以會搞得你放好控制項後又要改 Margin. 碰到比較複雜的設計 (比方動畫) 再使用 Blend for Visual Studio 來輔助.

    學 WPF 有個好處, 以後你想寫 Universal Windows Apps 要上手會快很多, 因為 UWA 也是採用 XAML 的設計, 雖然不完全一樣, 但很容易就跨過去了.

    以下兩本書很適合入門, 雖然書比較舊, 但這兩本非常經典, 內容也夠紮實.

    Essential WPF 精要剖析

    WPF與XAML應用程式開發講座


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2016年2月29日 上午 09:21
    版主
  • 能不能先教我怎樣用程式移動視窗.....

    T O T''

    2016年2月29日 上午 10:11
  • 在 WPF 叫 "Window" , 不叫 "Form"

    所以你是要移動 Window 在螢幕上的位置 ? WPF 和 Windows Form 在觀念上差很多, 他不是用甚麼 Timer 改變  Location 的方式來做移動 (Timer 的作法非常沒效率) , 參考以下

    https://msdn.microsoft.com/en-us/library/system.windows.uielement.rendertransform%28v=vs.110%29.aspx

    https://msdn.microsoft.com/zh-tw/library/system.windows.media.translatetransform%28v=vs.110%29.aspx


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2016年2月29日 上午 11:35
    版主
  • 嗯.....看完....還是寫不出來。只知道不是以絕對座標移動,改成相對位置移動。

    我能要一個範例麼?

    取得當前Window(Form) 在 screen的絕對位置。(相對是以起始點(0,0)?)

    設定當前Window(Form) 在 screen的絕對位置(任意)


    2016年3月1日 上午 02:07
  • 有個小誤差, Window 類型的物件是不能使用 Rendertransform 屬性的. 不過還是可以做 ( Window 對 Screen 是絕對定位), 例子如下:

    <Window x:Name="window" x:Class="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" Left="0" Top="0">
    	<Window.Resources>
    		<Storyboard x:Key="Storyboard1">
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="window">
    				<SplineDoubleKeyFrame KeyTime="0" Value="0"/>
    				<SplineDoubleKeyFrame KeyTime="0:0:0.5" Value="30"/>
    				<SplineDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>
    	</Window.Resources>
        <Grid>                                           
            <Button Content="Move" Click="Button_Click" Height="100" Width="100" />
        </Grid>
    </Window>

    Imports System.Windows.Media.Animation
    
    Class MainWindow
    
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
            DirectCast(Me.Resources("Storyboard1"), Storyboard).Begin()
        End Sub
    End Class


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2016年3月1日 上午 07:23
    版主
  • 對不起,我好像搞錯了一些東西。應該問原來的東西被什麼代替了才對。

    ''以下是筆記=======

    Window Form


    me.location.x
    me.location.y
    me.size.width
    me.size.height
    Public Shared ReadOnly Sc As Point =System.Windows.Forms.SystemInformation.PrimaryMonitorSize



    WPF

    me.left
    me.top
    me.Width
    me.Height
    Public Shared ReadOnly Sc As Point = New Point(SystemParameters.PrimaryScreenWidth, SystemParameters.PrimaryScreenHeight)







    2016年3月2日 上午 01:59