2015-01-11 1 views
0

아마도 ObjectDataProvider를 올바르게 사용하고 있지 않지만 MSDN 예제를 따르는 im은 무엇이 잘못되었는지 확실하지 않습니다.WPF - ObjectDataProvider를 추가하면 내 디자이너가 손상됩니다.

목표 : 버튼을 클릭하면 this.Close();를 수행하는 "exitButtonMethod"메소드를 호출하여 창을 닫습니다.

오류

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    xmlns:local="clr-namespace:WpfApplication1" 
    Title="Window1" WindowStyle="None" AllowsTransparency="True" 
    WindowStartupLocation="CenterScreen" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="254" Width="438" Opacity="1" Background="{x:Null}"> 

<Window.Resources> 
    <ObjectDataProvider ObjectType="{x:Type local:Window1}" 
        MethodName="exitButtonMethod" x:Key="callExitButtonMethod"> 
    </ObjectDataProvider> 
    <Style x:Key="ExitButtons" TargetType="{x:Type Button}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate x:Name="exitButtonTemplate" TargetType="Button"> 
        <Grid> 
         <Ellipse x:Name="exitButtonEllipse" Fill="#597E0000"/> 
         <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsPressed" Value="True"> 
          <Setter TargetName="exitButtonEllipse" Property="Fill" Value="#897E0000" /> 
          <Binding Source="{StaticResource callExitButtonMethod}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid Width="400" Height="200" Opacity="1"> 
    <Rectangle Height="200" HorizontalAlignment="Left" VerticalAlignment="Top" Name="rectangle1" Stroke="#FF7E0000" Width="400" RadiusX="40" RadiusY="40" Fill="#64860000" StrokeThickness="3" /> 
    <Button Style="{StaticResource ExitButtons}" Content="X" Height="25" Width="25" Margin="359,16,16,0" VerticalAlignment="Top" Focusable="True" FontSize="15" FontFamily="PMingLiU" Foreground="#FF7E0000" Opacity="1"/> 
</Grid> 

는 단순히 내 디자이너를 나누기 및 디자이너 나에게 다음과 같은 오류를 제공한다는 것입니다 :

System.Runtime.Remoting.RemotingException 
[228940] Designer process terminated unexpectedly! 
+0

그러나 실제로 코드가 올바르게 실행됩니까? 저는 개인적으로 Visual Studio 디자이너와 함께 많은 나쁜 경험을했습니다. 짜증나지만 코드가 작동하면 걱정하지 않을 것입니다. – Omada

+0

런타임에 stackoverflow 예외가 발생합니다. ( –

답변

0

ObjectDataProvider의 목적은 XAML에서 개체를 만드는 것입니다 무엇 당신 에 바인딩 할 수 있습니다. 또한이 객체를 사용하여 객체의 메서드를 호출 한 결과에 바인드 할 수 있습니다.

여기서 Window1 유형의 개체이며 callExitButtonMethod 바인딩입니다. 그래서 의도하지 않게 창 안쪽에 새로운 창을 만들고 있습니다.

<ObjectDataProvider ObjectType="{x:Type local:Window1}" 
        MethodName="exitButtonMethod" x:Key="callExitButtonMethod"> 
    </ObjectDataProvider> 

새 창을 만들면 창 내부에도 창이 생겨 무한 루프가됩니다.

스택 오버플로가 발생하는 이유는 다음과 같습니다.

현재 수행하려는 작업은 현재 수행중인 작업보다 훨씬 간단합니다. 당신이 그것을 클릭하면 버튼의 메소드를 호출하려면, 당신은 단순히 수행 할 수 있습니다

귀하의 경우

<Button Click="NameOfMethodHere" />

이, 당신의 버튼에 Click 매개 변수를 추가하고 ObjectDataProvider 제거.

편집 : 또한 스타일에서 이벤트를 설정하려면 EventSetter을 참조하십시오.

관련 문제