सिल्वरलाइट 4 & WPF 4 का उपयोग करके, मैं एक बटन शैली बनाने की कोशिश कर रहा हूं जो बटन को माउसओवर किए जाने पर किसी भी निहित पाठ के टेक्स्ट रंग को बदल देता है। जब से मैं इस दोनों सिल्वरलाइट & WPF के साथ संगत बनाने के लिए कोशिश कर रहा हूँ, मैं दृश्य राज्य प्रबंधक का उपयोग कर रहा:एक बटन के नियंत्रण टेम्पलेट में, मैं निहित पाठ का रंग कैसे सेट कर सकता हूं?
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="outerBorder" CornerRadius="4" BorderThickness="1" BorderBrush="#FF757679">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Duration="0" To="#FFFEFEFE"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="contentPresenter"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid>
<Border x:Name="Background" CornerRadius="3" BorderThickness="1" BorderBrush="Transparent">
<Grid>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Grid>
</Border>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
चूंकि यह एक नियमित रूप से पुराने बटन के लिए एक टेम्पलेट है, मुझे पता है कोई गारंटी है कि इसके अंदर एक टेक्स्टब्लॉक भी है, और पहले मुझे यकीन नहीं था कि यह भी संभव था। मजे की बात है, पाठ रंग में बदल जाती है बटन की तरह घोषित किया जाता है, तो:
<Button Content="Hello, World!" />
लेकिन यह नहीं में बदल जाती है, तो बटन की तरह घोषित किया जाता है:
<Button>
<TextBlock Text="Hello, World!" /> <!-- Same result with <TextBlock>Hello, World </TextBlock> -->
</Button>
हालांकि दृश्य पेड़ (जब स्नूप में निरीक्षण किया जाता है) समान (बटन -> सामग्री प्रस्तुतकर्ता -> टेक्स्टब्लॉक) है, इस चेतावनी के साथ कि पहले संस्करण में बनाए गए टेक्स्टब्लॉक में इसका डेटा संदर्भ "हैलो, वर्ल्ड" पर सेट है, जबकि दूसरे संस्करण में टेक्स्टब्लॉक केवल इसके है पाठ संपत्ति सेट। मुझे लगता है कि इसने नियंत्रण निर्माण के आदेश के साथ कुछ करने के लिए कुछ किया है (बटन का पहला संस्करण टेक्स्टब्लॉक बनाता है, दूसरे संस्करण में टेक्स्टब्लॉक पहले बनाया जा सकता है? वास्तव में इस पर निश्चित नहीं है)।
इस शोध के दौरान, मैंने कुछ समाधान देखे हैं जो सिल्वरलाइट में काम करते हैं (जैसे ContentPresenter को ContentControl के साथ बदलना), लेकिन यह WPF (प्रोग्राम वास्तव में क्रैश) में काम नहीं करेगा।
चूंकि यह बटन के नियंत्रण टेम्पलेट में है, और यदि संभव हो तो मैं वीएसएम का उपयोग करना चाहता हूं, मुझे लगता है कि बटन की अपनी अग्रभूमि संपत्ति को स्पष्ट रूप से बदलना भी नियम है (मुझे नहीं पता कि मैं इसे कैसे एक्सेस करूं टेम्पलेट के भीतर?)
मैं वास्तव में किसी भी मदद की सराहना करता हूं, कोई भी सलाह दे सकता है।
का उपयोग करें मुझे आश्चर्य है कि टेक्स्टलेक्शन को टेक्स्टब्लॉक के साथ कुछ भी नहीं मिला है। – Denis