سلام
برای قسمت اول سئوال شما باید رزولیشن رو بدست بیارید و بر حسب اون پوزیشن رو تعیین کنید
البته یک راه ابتکاری هم هست و اون اینه که شما یک فرم تعریف مکنید و تنظیمات زیر رو روی اون اعمال میکنید
AllowsTransparency="True" Topmost="True" WindowStyle="None" Background="{x:Null}" Foreground="{x:Null}" WindowState="Maximized" ShowInTaskbar="False">
در این حالت یک پنجره دارید در حالت ماکزیماز شده و بدون بکگراند و در تسک بار ویندوز هم نمای ازش نیست و شما به تمام صفحه دسک تاپ دسترسی دارید حالا شما یک یوزر کنترل تعریف میکنی و گوشه فرم بالا سمت چپ قرارش میدی و این افکت یا هر افکت دیگه رو بر روی اون اعکال میکنی و با تغییر سایز رزولیشن همیشه اون گوشه بالا هست
این کد یوزر کنترل نمونه
<Grid>
<Border BorderThickness="2" CornerRadius="4" BorderBrush="Black">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Tahoma" FontSize="32" Text="Mehdi Farzad"></TextBlock>
<Border.Background>
<LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
<GradientStop Color="#FF00DCDA" Offset="0" />
<GradientStop Color="Cyan" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
</Grid>
</UserControl>
این کد استفاده از یوزر کنترل در فرم
<Grid>
<my:UserControl1 Margin="0,10,10,0" x:Name="userControl11" VerticalAlignment="Top" Height="172" HorizontalAlignment="Right" />
</Grid>
و این هم کد اکشنی که درست میکنید
<Window.Resources>
<Storyboard x:Key="Storyboard1" AutoReverse="True">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="userControl11">
<SplineDoubleKeyFrame KeyTime="0" Value="0"/>
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
<SplineDoubleKeyFrame KeyTime="0:0:2" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
حالا هر جا میخوای این اکشن اجرا بشه بنویس
System.Windows.Media.Animation.Storyboard MyStoryboard = (System.Windows.Media.Animation.Storyboard)(FindResource("Storyboard1"));
MyStoryboard.Begin();
فایل ضمیه هست(test 2)
برای قسمت دوم سئوال : (اگه بخوای با بدست آوردن رزولیشن و استفاده از یک پنجره کوچک این کار رو بکنی و از راه ابتکاری که گفتم نری)
بعد از اینکه محل باز شدن پنجره رو با کد نویسی بدست آوردی و ست کردی
شما یک
Storyboard
تعریف میکنیدبه عنوان مثال
<Window.Resources>
<Storyboard x:Key="OnLoaded1" AutoReverse="True" Completed="Storyboard_Completed">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="window">
<SplineDoubleKeyFrame KeyTime="0" Value="0"/>
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
<SplineDoubleKeyFrame KeyTime="0:0:2" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
حالا اونو بشکل زیر به وسیله Trigers به اونت لود فرم برنامه متصل میکنید
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource OnLoaded1}"/>
</EventTrigger>
</Window.Triggers>
نکته 1 : برای اینکه بتونید با افکت اوپسیدی فرم رو کم کنید یا اونو فید کنید باید حتما خاصیت AllowsTransparency فرم رو برابر true قرار بدید
با کد های بالا پنجره شما با حالت فید باز میشه و بعد از چند ثانیه با حالت فید بسته میشه
نکته 2 : ( مهم) برای اینکه بعد از اینکه پنجره با حالت فید کم رنگ و مهو شد کاملا بسته بشه باید برای اون Storyboard که اول تعریف کردیم یک متد
Completed="Storyboard_Completed"
درست کنید و در اون بنویسید
privatevoid Storyboard_Completed(object sender, EventArgs e)
{
this.Close();
}
فایل ضمیمه میباشد،Test1(البته من در این فایل محل باز شدن ویندوز رو مشخص نکردم)
سعی کردم در این دوراه دونمونه طریقه استفاده از اکشن درست شده رو هم توضیح بدم