डिजाइन पर काम करते समय, मैं कई घटकों की दृश्यता को नियंत्रित करने में सक्षम होना चाहता हूं, मैं एक ही संपत्ति से सभी को नियंत्रित करने में सक्षम होना चाहता हूं। अब तक मेरा कोड इस तरह दिखता है

ignoreable="e d"
<StackPanel d:IsHidden=true>
...
</StackPanel>
<StackPanel e:IsHidden=false>
...
</StackPanel>
<StackPanel d:IsHidden=true>
...
</StackPanel>
<StackPanel e:IsHidden=false>
...
</StackPanel>

क्या एकल चर से सभी पैनलों की दृश्यता को नियंत्रित करने का कोई तरीका है?

तो यह इस तरह दिखेगा

<StackPanel d:IsHidden=isVisibleVar>
...
</StackPanel>
<StackPanel e:IsHidden=isVisibleVarOther>
...
</StackPanel>

मुझे कन्वर्टर्स के बारे में पता है। मुझे पता है कि इसे रनटाइम पर कैसे करना है, मैं जो चाहता हूं वह खोज और प्रतिस्थापन के बजाय दो समूहों की दृश्यता के बीच एक स्थान से स्विच करने का एक तेज़ तरीका है

wpf
1
Danw25 3 सितंबर 2018, 11:34
2
आपको जो चाहिए वह आपके ViewModel और एक BoolToVisibility कनवर्टर पर एक बूल प्रॉपर्टी है, जो मुझे लगता है कि PresentationFramework.dll में शामिल है, लेकिन फिर मुझे नहीं पता कि आप कौन से .NET फ्रेमवर्क हैं उपयोग कर रहे हैं? MS ने केवल उसी के लिए एक कनवर्टर जारी किया है MSDN लिंक
 – 
XAMlMAX
3 सितंबर 2018, 13:31
सभी StackPanels की Visibility संपत्ति को "पैरेंट" पैनल में सभी StackPanels डालने की एक ही स्रोत संपत्ति से बांधें और इस की Visibility संपत्ति को स्रोत संपत्ति से बांधें . स्रोत संपत्ति के प्रकार के आधार पर आपको मान को Visibility गणना मान में बदलने के लिए कनवर्टर का उपयोग करने की आवश्यकता हो सकती है।
 – 
mm8
3 सितंबर 2018, 18:37
वे अलग-अलग पैनल में हैं, मैं उन सभी को एक ही के तहत समूहित नहीं कर सकता।
 – 
Danw25
4 सितंबर 2018, 20:45
तब मेरे पहले सुझाव के बारे में क्या...?
 – 
mm8
5 सितंबर 2018, 12:44
केवल स्पष्टीकरण के लिए: आप डिज़ाइन के दौरान दृश्यता को स्विच करना चाहते हैं - समय रनटाइम में नहीं है?
 – 
Martin Backasch
25 सितंबर 2018, 09:18

2 जवाब

एक कामकाज मिला। प्रत्येक समूह के लिए एक शैली का प्रयोग करें। तो मुझे केवल दो स्थानों में दृश्यता सेट करने की आवश्यकता है।

<Style x:Key="MainButtonStyle" 
                       TargetType="Button"
                       BasedOn= "{StaticResource BasicButton}">
                        <Setter Property="Visibility" Value="Visible"></Setter>
</Style>

 <Style x:Key="SecButtonStyle" 
                       TargetType="Button"
                       BasedOn= "{StaticResource BasicButton}">
                        <Setter Property="Visibility" Value="Hidden"></Setter>
</Style>
0
Danw25 25 सितंबर 2018, 09:11

मेरा उत्तर इतना उच्च परिष्कृत नहीं हो सकता है और केवल एक "एकल चर" का उपयोग नहीं किया है, लेकिन यह चाल करेगा (दो चर का उपयोग करके)।


तो सबसे पहले आप अपने एक्सएएमएल में दो चर परिभाषित करते हैं। उदाहरण के लिए सीधे Window.Resources जैसे:

<Window ...
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        >

    <Window.Resources>
        <system:Boolean x:Key="ShowInDemoMode">False</system:Boolean>
        <system:Boolean x:Key="HideInDemoMode">True</system:Boolean>
    </Window.Resources>

    ...

</Window>

या - यदि आपके पास एक है - अपनी शैली में-ResourceDictionary

<ResourceDictionary ...
                    xmlns:system="clr-namespace:System;assembly=mscorlib"
                    >

    <system:Boolean x:Key="ShowInDemoMode">False</system:Boolean>
    <system:Boolean x:Key="HideInDemoMode">True</system:Boolean>

    ...

</ResourceDictionary>

फिर आप दोनों का उपयोग इस तरह कर सकते हैं:

<StackPanel d:IsHidden="{StaticResource HideInDemoMode}">
    ...
</StackPanel>
<StackPanel d:IsHidden="{StaticResource ShowInDemoMode}">
    ...
</StackPanel>
<StackPanel d:IsHidden="{StaticResource HideInDemoMode}">
    ...
</StackPanel>
<StackPanel d:IsHidden="{StaticResource ShowInDemoMode}">
    ...
</StackPanel>

इस स्थिर संसाधनों के साथ आप इन दो संसाधनों के मूल्यों को बदलकर आसानी से अपने StackPanel आइटम की दृश्यता के बीच स्विच कर सकते हैं।


टिप्पणी:
d:IsHidden को true या false पर सेट करना केवल DesignTime में सक्रिय है और आपके एप्लिकेशन को चलाते समय आइटम दिखाएगा, जो आपका उत्तर

0
Martin Backasch 27 सितंबर 2018, 15:36
उपयोग नहीं किया जा सकता क्योंकि यह दृश्यता गुण के साथ विरोध करता है।
 – 
Danw25
30 सितंबर 2018, 09:51
@ Danw25: मैं अपना उत्तर समायोजित करने का प्रयास करूंगा। इस बीच क्या आप कृपया अपना प्रश्न अपडेट कर सकते हैं, और अपना अधिक वास्तविक कोड प्रदान कर सकते हैं, क्योंकि आपके प्रदत्त कोड "यह मेरे लिए काम करता है" के साथ। और अगर मैं Visibility प्रॉपर्टी जैसे <StackPanel d:IsHidden="{StaticResource HideInDemoMode}" Visibility="Visible"> ... </StackPanel> सेट करता हूं।
 – 
Martin Backasch
1 अक्टूबर 2018, 01:00