2011-05-02 1 views
2

XAML에 WPF 코드 숨김을 추가하고 powershell 추가 형식을 사용하여 컴파일하려고했습니다. PowerBoots가 있지만 사용하고 싶지 않습니다. Embed하려고하는 코드는 here입니다. 나는 The PowershellGuy way 구현을 참조했지만 여전히 코드 숨김 파일을 사용해야합니다.PowerBoot를 사용하지 않고 powershell의 추가 형식을 사용하여 WPF Xaml을 컴파일하십시오.

Add-Type -AssemblyName presentationframework 
[xml]$xaml = @' 
<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="350" Width="525" AllowsTransparency="True" 
WindowStyle="None" 
WindowState="Maximized" Topmost="False" IsHitTestVisible="False"> 
</Window> 
'@ 

$reader=(New-Object Xml.XmlNodeReader $xaml) 
$Form=[Windows.Markup.XamlReader]::Load($reader) 
$Form.ShowDialog() | out-null 

링크에서 코드 뒤에 코드는

protected override void OnRender(DrawingContext drawingContext) 
{ 
    base.OnRender(drawingContext); 
    var screenGeometry = new RectangleGeometry(new Rect(0, 0, ActualWidth, ActualHeight)); 
    var excludeRectangle = new RectangleGeometry(new Rect(200, 200, 150, 150)); 
    drawingContext.PushClip(CombinedGeometry.Combine(screenGeometry, excludeRectangle, GeometryCombineMode.Exclude, null)); 
    drawingContext.PushOpacity(.8); 
    drawingContext.DrawRectangle(Brushes.Black, null, new Rect(0, 0, ActualWidth, ActualHeight)); 
    drawingContext.Pop(); drawingContext.Pop(); 
    } 

감사합니다!

답변

1

XamlReader를 통해로드 된 XAML에서 코드 숨김 기능을 사용할 수 없으므로 기본적으로 만들지 않고 수행하려는 작업을 수행 할 수 없습니다 (느슨한 XAML의 Window OnRender 메서드 재정의). 창 클래스에서 파생 된 새로운 유형의 ...

하지만 그건 당신이 뭘하려는 건지에 대한 잔인한 사람이다, 나는 생각 :이 도움이되지만, 여기 인 경우

Add-Type -AssemblyName presentationframework 
[xml]$xaml = @' 
<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
AllowsTransparency="True" WindowStyle="None" 
Background="#AA000000" WindowState="Maximized" 
Height="{x:Static SystemParameters.PrimaryScreenHeight}" 
Width="{x:Static SystemParameters.PrimaryScreenWidth}" 
Title="Window Title" Topmost="False" IsHitTestVisible="False"></Window> 
'@ 

$reader=(New-Object Xml.XmlNodeReader $xaml) 
$Form=[Windows.Markup.XamlReader]::Load($reader) 
$Form.ShowDialog() | out-null 
1

는 나도 몰라 예를 들어, 어떤 종류의 PowerShell 코드가 버튼 "클릭"액션 뒤에 추가됩니다.

#requires -version 2 
Add-Type -AssemblyName PresentationFramework 
[xml]$xaml = 
@" 
<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="408"> 
    <Grid> 
     <Button x:Name="button1" 
       Width="75" 
       Height="23" 
       Canvas.Left="118" 
       Canvas.Top="10" 
       Content="Click Here" /> 
    </Grid> 
</Window> 
"@ 

Clear-Host 
$reader=(New-Object System.Xml.XmlNodeReader $xaml) 
$target=[Windows.Markup.XamlReader]::Load($reader) 
$control=$target.FindName("button1") 
$eventMethod=$control.add_click 
$eventMethod.Invoke({$target.Title="Hello $((Get-Date).ToString('G'))"}) 
$target.ShowDialog() | out-null 
+0

소리가 좋습니다. XAML없이 C# 코드를 임베드하는 것이 Xaml 자체보다 바람직하다고 생각합니다. JPBlanc과 JayKul 고맙습니다! – Deku