मैं डब्ल्यूपीएफ के लिए नया हूं और मैं पूरी तरह से एक अग्रभूमि के साथ फंस गया हूं जो अपडेट नहीं करना चाहता: @

मैं टॉगलबटन व्यवहार के साथ रेडियोधटन नहीं बनाना चाहता (यह ठीक है), लेकिन मैं इस बटन के अंदर टेक्स्ट लपेटना चाहता हूं।

यदि सामग्री को टॉगलबटन में परिभाषित किया गया है, तो मेरा अग्रभूमि सफेद हो जाता है। लेकिन अगर मैं टॉगलबटन (एक रैप के साथ) के अंदर टेक्स्टब्लॉक का उपयोग करता हूं, तो मेरा अग्रभूमि बदलना नहीं चाहता है।

एक्सएएमएल में मेरे दो बटन

        <RadioButton GroupName="line1" Grid.Row="1" Grid.Column="1" Style="{DynamicResource ToggleButtonStyle1}">
        <RadioButton.Content>
            <TextBlock TextWrapping="Wrap" >I can wrap but ...</TextBlock>
        </RadioButton.Content>
    </RadioButton>

    <RadioButton GroupName="line0" Grid.Row="1" Grid.Column="2" Style="{DynamicResource ToggleButtonStyle1}" Content="i can't Wrap and it's not good"/>

और मेरा ControlTemplate app.xaml . में

 <ControlTemplate TargetType="{x:Type ToggleButton}">
    <Border x:Name="border" BorderThickness="1" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
        <Border.BorderBrush>
            <SolidColorBrush Color="{DynamicResource BleuClair}"/>
        </Border.BorderBrush>
        <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="Button.IsDefaulted" Value="true">
            <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Static.Background}"/>
            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Static.Border}"/>
            <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        </Trigger>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
            <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="White"/>
        </Trigger>
        <Trigger Property="IsPressed" Value="true">
            <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
            <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="White"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
            <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="White"/>
        </Trigger>
        <Trigger Property="IsChecked"  Value="true">
            <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
            <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="White"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

मुझे यकीन नहीं है कि मुझे टेक्स्टब्लॉक के बारे में "कुछ" जोड़ने के लिए कंट्रोल टेम्पलेट या सामग्री प्रस्तुतकर्ता को अपडेट करने की आवश्यकता है या यदि मुझे इस कस्टम शैली के लिए बाध्यकारी बनाने के लिए एक्सएएमएल को अपडेट करने की आवश्यकता है।

अपना समय देने के लिए धन्यवाद :)

0
Toows 6 जुलाई 2017, 17:05

2 जवाब

सबसे बढ़िया उत्तर

मुझे लगता है (आखिरकार:'() मेरा समाधान। मुझे लगता है कि यह कंट्रोल टेम्पलेट में किया जा सकता है, लेकिन मुझे नहीं पता कि ^^

मेरे पास यह था:

<RadioButton GroupName="line1" Grid.Row="1" Grid.Column="1" Style"{DynamicResource ToggleButtonStyle1}">
        <TextBlock TextWrapping="Wrap" >I can wrap but ...</TextBlock>
</RadioButton>

और मेरी अग्रभूमि संपत्ति (रेडियोबटन से) लागू करने के लिए, मैं बस सामग्री प्रस्तुतकर्ता के लिए बाध्यकारी जोड़ता हूं।

    <RadioButton GroupName="line1" Grid.Row="1" Grid.Column="1" Style="{DynamicResource ToggleButtonStyle1}">
        <TextBlock Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
                   TextWrapping="Wrap" >I can wrap but ...</TextBlock>
    </RadioButton>
0
Toows 6 जुलाई 2017, 20:15

ऐसा लगता है कि आप जो खोज रहे हैं वह एक ऐसी घटना है जो क्लिक करने पर अग्रभूमि रंग को चालू कर देगी। इस तरह अपना एक्सएएमएल स्थापित करने का प्रयास करें:

<RadioButton Click="RadioButton_Clicked" GroupName="line1" Grid.Row="1" Grid.Column="1" Style="{DynamicResource ToggleButtonStyle1}">
     <TextBlock TextWrapping="Wrap" >Text here</TextBlock>
</RadioButton>

अब अपने कोड में, एक विधि के साथ ईवेंट को हैंडल करें

private void RadioButton_Clicked(object sender, RoutedEventArgs e)
{
    // get an object of the button
    RadioButton button = (RadioButton)sender;

    // access the textblock to change the foreground
    TextBlock text = (TextBlock)button.Child;

    // change the foreground to white
    text.Foreground = Brushes.White;
}

उम्मीद है कि यह मदद करता है या आप जो खोज रहे हैं उसके करीब है!

0
Matt L. 6 जुलाई 2017, 17:27