2009-06-15 10 views
3

다음 XAML은 텍스트 상자 주위에 이상한 행동 창을 생성합니다, 적어도 내 제한된 테스트가 진행되는 동안 텍스트 상자가 삽입 된 경계로 렌더링하는 것이 무엇WPF 텍스트 상자 및 테두리 호기심 크기 조정 동작

<Window x:Class="WpfSandbox.CuriousExample" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="CuriousExample" Height="300" Width="300"> 
    <DockPanel Margin="15"> 
     <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox> 
    </DockPanel> 
</Window> 

패턴 (상단/왼쪽은 검은 색, 오른쪽/아래는 회색). 그러나 원본 이외의 위치로 크기를 조정하면 전체 텍스트 상자 테두리가 검은 색으로 변합니다. 폼을 처음로드 할 때 화면에있는 정확한 픽셀 수로 윈도우를 반환 할 때마다 다시 인세 트됩니다.

내가 추측하고있어 내가 쉽게이 코드를 사용하여 문제를 해결할 수있는 픽셀 물리기되지 않습니다

<Window x:Class="WpfSandbox.CuriousExample" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="CuriousExample" Height="300" Width="300"> 
    <DockPanel Margin="15"> 
     <Border BorderThickness="1" BorderBrush="#FF000000"> 
      <TextBox BorderThickness="0" ></TextBox> 
     </Border> 
    </DockPanel> 
</Window> 

사람은 제가 보는 무엇인지에 대한 설명을 벤처 걱정? 아니면 내 머리 속에 다 있니?

내가 말했듯이 위의 해결 방법은이 문제를 해결할 수 있습니다. 여기서 일어나는 일을 이해하려고합니다.

감사합니다,

-Scott

당신은 당신의 app.xaml를 열고 비스타 테마 (에어로)

를 사용하고 같은 것을 넣어 응용 프로그램을 강제 할 수

+0

어떤 OS를 사용하고 있습니까? XP SP3의 첫 번째 XAML 스 니펫에 검은 색 테두리가 모두 표시됩니다. – micahtan

+0

지금까지 3.5 및 4.0 베타 모두에 대해 Server 2008 및 2003을 재현했습니다. 나는 오늘 밤 비스타에 맞설거야. – sparker

답변

0

:

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/PresentationFramework.Aero;V3.0.0.0;31bf3856ad364e35;component/themes/aero.normalcolor.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

프로젝트에 PresentationFramework.Aero 참조를 넣는 것을 잊지 마십시오.

이렇게하면 Vista 에서처럼 XP에서 응용 프로그램을 볼 수 있습니다.

0

음 ... 초점 문제에 부딪 혔습니까? Aero 테마를로드했는데 TextBox에 포커스가 있거나 마우스가 넘어 졌을 때 TextBox가 삽입되어 있습니다. 당신은 당신과 같이 두 번째 텍스트 상자를 추가 할 때 꽤 명확하게 볼 수 있습니다

<DockPanel Margin="15"> 
    <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox> 
    <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox> 
</DockPanel> 

에어로의 기본 스타일은 컨트롤이있을 때 몇 가지 추가 속성을 설정 보이는 ListBoxChrome 사용하는 텍스트 상자의 경계를 설정하는의 ControlTemplate을 사용 집중하거나 moused입니다.

대체로 Luna 테마의 기본 스타일은 포함하고있는 Border의 BorderBrush를 TemplateBinding에 직접 바인딩합니다. 즉, 항상 존중됩니다 (XP/Luna에서 작동하고 2008 또는 Vista에서는 작동하지 않는 이유).

+0

위와 같이 Aero 테마를 적용하면 설명하는 동작이 작동하지 않습니다. 그러나 그 주제가 없으면 원래 설명 된 문제가 나타납니다. – sparker