XAML에는 디버그 모드에 대한 조건부 컴파일러 지시문이 있습니까?
나는 XAML의 스타일을 위해 다음과 같은 것이 필요합니다:
<Application.Resources>
#if DEBUG
<Style TargetType="{x:Type ToolTip}">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FlowDirection" Value="LeftToRight"/>
</Style>
#else
<Style TargetType="{x:Type ToolTip}">
<Setter Property="FontFamily" Value="Tahoma"/>
<Setter Property="FlowDirection" Value="RightToLeft"/>
</Style>
#endif
</Application.Resources>
저는 최근에 이것을 해야만 했고, 명확한 예를 쉽게 찾을 수 없을 때 그것이 얼마나 간단한지에 놀랐습니다.제가 한 일은 AssemblyInfo.cs 에 다음을 추가한 것입니다.
#if DEBUG
[assembly: XmlnsDefinition( "debug-mode", "Namespace" )]
#endif
그런 다음 마크업 호환 네임스페이스의 AlternateContent 태그를 사용하여 해당 네임스페이스 정의의 존재에 따라 콘텐츠를 선택합니다.
<Window x:Class="Namespace.Class"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="debug-mode"
Width="400" Height="400">
...
<mc:AlternateContent>
<mc:Choice Requires="d">
<Style TargetType="{x:Type ToolTip}">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FlowDirection" Value="LeftToRight"/>
</Style>
</mc:Choice>
<mc:Fallback>
<Style TargetType="{x:Type ToolTip}">
<Setter Property="FontFamily" Value="Tahoma"/>
<Setter Property="FlowDirection" Value="RightToLeft"/>
</Style>
</mc:Fallback>
</mc:AlternateContent>
...
</Window>
이제 DEBUG가 정의되면 "debug-mode"도 정의되고 "d" 네임스페이스가 존재합니다.그러면 대체 내용 태그가 첫 번째 코드 블록을 선택합니다.DEBUG가 정의되지 않은 경우 코드의 폴백 블록이 사용됩니다.
이 샘플 코드는 테스트되지 않았지만 일부 디버그 단추를 조건부로 표시하기 위해 현재 프로젝트에서 사용하는 것과 기본적으로 동일합니다.
저는 "무시할 수 있는" 태그에 의존하는 몇 가지 예제 코드가 있는 블로그 게시물을 보았지만, 그것은 훨씬 덜 명확하고 이 방법으로 사용하기 쉬운 것처럼 보였습니다.
WPF/Silverlight/WP7에서는 이 작업이 불가능합니다.
흥미롭게도, 표준 문서인 ISO/IEC 29500(Office Open XML File Formats)은 XML 문서에서 이를 처리하는 방법을 다루며, XAML은 해당 규격의 항목 중 하나를 지원합니다.mc:Ignorable이를 통해 다음과 같은 작업을 수행할 수 있습니다.
<Page xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:c="Comments"
mc:Ignorable="c">
<Button Content="Some Text"
c:Content="Some other text" />
</Page>
특성을 주석 처리합니다.
XAML 파서 팀(SL4, WP7.1, WPF)은 단순히 무언가를 만드는 것이 아니라 속성을 무시하는 요구를 해결하기 위해 이 사양을 사용하기로 결정했습니다.이 때문에 일부 기본 XAML 페이지에는 'mc' 네임스페이스가 정의되어 있습니다.언젠가 XAML이 대체 콘텐츠 로드를 허용하는 나머지 사양을 지원한다면 멋질 것 같습니다.
그mc:Ignorable특성은 설계 시간 기능을 지원하기 위해 혼합에서 사용됩니다.
템플릿 선택기를 사용할 수 있습니다.DataTemplateSelector 클래스는 코드화한 것입니다.재정의하는 템플릿 선택 방법을 사용하여 전처리기 지시사항을 넣을 수 있습니다.
http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx
저는 이것들 중 어느 것에도 만족하지 못했고 이것을 했습니다.
내 XAML에는 .cs 파일에서 스크루하고 있다는 것을 알 수 있도록 공간이 있는 속성이나 태그를 넣었습니다.
<Window x:Class="...
mc:Ignorable="d"
Title=""
BorderThickness="2"
WindowStartupLocation="CenterScreen"
ResizeMode="NoResize"
Height="200"
Width="500"
WindowStyle="None"
>
내 코드 뒤에 있는 내 코드에서 나는 이렇게 합니다.
public partial class ScanProgressWindow : Window
{
public ScanProgressWindow()
{
InitializeComponent();
#if DEBUG
this.WindowStyle = WindowStyle.SingleBorderWindow;
#endif
}
}
나한테 효과가 있어요.
저는 주어진 답들이 가장 사용하기 쉽다고 생각하지 않습니다.사용자 지정 연결 가능 종속성 속성을 사용하는 솔루션은 다음과 같습니다.
using namespace Utility{
public static class DebugVisibility
{
public static readonly DependencyProperty IsVisibleProperty = DependencyProperty.RegisterAttached(
"Debug", typeof(bool?), typeof(DebugVisibility), new PropertyMetadata(default(bool?), IsVisibleChangedCallback));
private static void IsVisibleChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var fe = d as FrameworkElement;
if (fe == null)
return;
#if DEBUG
fe.Visibility = Visibility.Visible;
#else
fe.Visibility = Visibility.Collapsed;
#endif
}
public static void SetIsVisible(DependencyObject element, bool? value)
{
element.SetValue(IsVisibleProperty, value);
}
public static bool? GetIsVisible(DependencyObject element)
{
return (bool?)element.GetValue(IsVisibleProperty);
}
}
}
그리고 xaml은 다음과 같이 사용됩니다.
<window ... xmlns:Util="clr-namespace:MyNamespace.Utility" >
<Label Util:DebugVisibility.IsVisible="True">
</window>
당신이 다른 가시성 논리를 추가할 경우를 대비해 제가 보관했습니다.이것은 모든 컨트롤에 바인딩 및 부착할 수 있는 간단한 토글입니다.
언급URL : https://stackoverflow.com/questions/8732307/does-xaml-have-a-conditional-compiler-directive-for-debug-mode
'programing' 카테고리의 다른 글
| MySQL/MariaDB: 피벗 테이블 보기 만들기 (0) | 2023.06.04 |
|---|---|
| 각도에서 ngDefaultControl이란 무엇입니까? (0) | 2023.06.04 |
| 루비에서 사용되지 않는 코드를 표시하는 모범 사례? (0) | 2023.06.04 |
| 아이템을 유지하는 방법새로 인스턴스화된 스피너에 대한 발사에서 선택되었습니까? (0) | 2023.06.04 |
| Ruby에서 STDIN을 사용한 모범 사례? (0) | 2023.06.04 |