MSDN के अनुसार, WindowChrome
एक वस्तु है कि एक खिड़की के गैर क्लाइंट क्षेत्र के लिए अनुकूलन का वर्णन करता है का प्रतिनिधित्व करता है।
MSDN नमूना पढ़ने और अपने कोड थोड़ी देर खेलने के बाद, मैंने देखा है अपने कोड MSDN नमूना कोड से निम्नलिखित की तरह होना चाहिए:
<Style x:Key="StandardStyle" TargetType="{x:Type local:MainWindow}">
<Setter Property="shell:WindowChrome.WindowChrome">
<Setter.Value>
<shell:WindowChrome />
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MainWindow}">
<!--Note there is a Grid as the root-->
<Grid>
<Border Background="White"
Margin="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=WindowNonClientFrameThickness}">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="36,8,0,0"/>
<Image Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(shell:WindowChrome.WindowChrome).ResizeBorderThickness}"
Width="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=SmallIconSize.Width}"
shell:WindowChrome.IsHitTestVisibleInChrome="True"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
ध्यान दें, वहाँ मूल तत्व के रूप में एक ग्रिड है जिसमें विंडो के एनसी को अनुकूलित करने के लिए कुछ तत्व शामिल हैं।
अद्यतन:
आप MSDN पेज के टिप्पणी में देख सकते हैं, इसमें वर्गों:
WindowStyle.None
WindowChrome
ये रूप को कस्टमाइज़ करने के दो तरीके हैं एक डब्ल्यूपीएफ आवेदन खिड़की के।
हालांकि, WindowStyle.None
को Window.WindowStyle
संपत्ति की स्थापना:
इस विंडो से गैर ग्राहक फ्रेम दूर करता है और केवल ग्राहक क्षेत्र छोड़ देता है, आप एक कस्टम शैली लागू कर सकता है। हालांकि, जब गैर-क्लाइंट फ्रेम हटा दिया जाता है, तो आप सिस्टम सुविधाओं और व्यवहार भी खो देते हैं, जैसे कैप्शन बटन और विंडो आकार बदलना। एक और दुष्प्रभाव यह है कि खिड़की विंडोज़ टास्कबार को अधिकतम होने पर कवर करेगी।
फिर WindowChrome
WPF का उपयोग कर एनसी अनुकूलन सक्षम करने के लिए शुरू की है: जबकि इसके मानक कार्यक्षमता को बनाए रखना
एक खिड़की को अनुकूलित करने के लिए आपको WindowChrome वर्ग का उपयोग कर सकते हैं। विंडो क्रोम क्लास दृश्यों से विंडो फ्रेम की कार्यक्षमता को अलग करता है, और आपको आपके एप्लिकेशन विंडो के क्लाइंट और गैर-क्लाइंट क्षेत्रों के बीच की सीमा को नियंत्रित करने देता है। विंडो क्रोम क्लास आपको गैर-क्लाइंट क्षेत्र को कवर करने के लिए क्लाइंट क्षेत्र को विस्तारित करके विंडो फ्रेम को में WPF सामग्री डालने देता है। साथ ही, यह दो अदृश्य क्षेत्रों के माध्यम से सिस्टम व्यवहार को बरकरार रखता है; आकार बदलें और कैप्शन क्षेत्रों का आकार बदलें।
तो आपके प्रश्न पर वापस, आपके द्वारा प्राप्त टेम्पलेट को एमएसडीएन नमूना कोड से कॉपी किया जाना चाहिए, लेकिन वास्तविक रूट Grid
को याद किया जाना चाहिए। सीमा पर मार्जिन एनसी को कुछ जगह देने के लिए है। एमएसडीएन नमूना कोड में, ContenPreseter
में केवल क्लाइंट क्षेत्र होता है, जबकि एनसी में Border
, विंडो शीर्षक के लिए TextBlock
और विंडो आइकन के लिए Image
शामिल है।
रीपैप करने के लिए, WindowChrome
सेटिंग Window.Template
में विंडो के एनसी क्षेत्र को अनुकूलित करने में सक्षम बनाता है।
नोट: नमूना MSDN नमूना कोड नेट 4.5 इन पुराना हो चुका एक छोटे से लगता है, System.Windows.Shell.WindowChrome
PresentationFramework.dll
में है, इसलिए कोड की तरह लग रहे हो सकता है:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Style="{DynamicResource WindowStyle1}" Icon="Icon1.ico">
<Window.Resources>
<Style x:Key="WindowStyle1" TargetType="{x:Type Window}">
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome />
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Border Background="Red"
Margin="{Binding Source={x:Static SystemParameters.WindowNonClientFrameThickness}}">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="36,8,0,0"/>
<Image Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=WindowChrome.WindowChrome.ResizeBorderThickness}"
Width="{Binding Source={x:Static SystemParameters.SmallIconWidth}}"
WindowChrome.IsHitTestVisibleInChrome="True"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Button />
</Grid>
आप सही हैं मुझे विश्वास है। उन्होंने एमएसडीएन से कोड की प्रतिलिपि बनाई, और यह किसी भी तरह से इस तरह से रुक गया। – hattenn