2012-02-08 11 views
12

इस समस्या का एक शानदार समाधान होना चाहिए, लेकिन मुझे कुछ भी ऑनलाइन नहीं मिल रहा है। मेरे पास एक ग्रिड है जिसमें एक स्तंभ और पंक्ति है जिसमें चौड़ाई/ऊंचाई * है, जिसमें एक सूची बॉक्स है। मेरे पास विंडो विंडो आकार है जो यूआई विगेट्स/फ़ॉन्ट्स के प्रत्येक सेट के लिए उचित आकार में विंडो का आकार बदलने की अनुमति देने के लिए चौड़ाई और हाइट पर सेट है। जब मैं सूची बॉक्स में आइटम जोड़ता हूं, तो यह खिड़की बढ़ने के कारण आकार बदलता है।विंडो के साथ आकार बदलने के लिए ListBox प्राप्त करें, लेकिन सामग्री के साथ आकार बदलें

मैं सूची का आकार बदलना चाहता हूं यदि मैं खिड़की का आकार बदलता हूं, लेकिन यदि मैं सूची बॉक्स की चौड़ाई से अधिक सामग्री जोड़ता हूं, तो मैं स्क्रॉलबार को प्रकट करना चाहता हूं और इसके लिए नहीं बढ़ता, खिड़की का कारण बनता हूं बढ़ना। यदि मैं विंडो के लिए स्पष्ट आकार सेट करता हूं और मैन्युअल (डिफ़ॉल्ट) पर SizeToContent सेट करता हूं, तो यह मेरा इरादा रखता है।

स्टार्टअप पर सामग्री के लिए विंडो का आकार देने का कोई तरीका है और सूची बॉक्स के आकार के साथ सूची बॉक्स बढ़ाना जारी है, लेकिन इसकी सामग्री के साथ नहीं?

+3

एक ही समस्या है, लेकिन एक ग्रिडस्प्लिटर के माध्यम से समायोज्य ऊंचाई के साथ एक ग्रिड के अंदर। सूची बॉक्स में आइटम जोड़ना सूची बॉक्स बढ़ता है और स्क्रॉलिंग के बजाए ग्रिडप्लिटर को ले जाता है। –

उत्तर

0

आकार बदलने के लिए ListBox बनाने के जब आप विंडो का आकार बदलने के बस का उपयोग करें:

<ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" .../> 

अपने ListBox में स्क्रॉल सक्षम करने के लिए आप एक जवाब यहां पा सकते हैं क्योंकि ListBox के डिफ़ॉल्ट टेम्पलेट एक ScrollViewer शामिल हैं।

How can I get a vertical scrollbar in my ListBox?

1

यह अभिप्रेत व्यवहार described here रूप WidthAndHeight को SizeToContent संपत्ति की स्थापना से हुई है।

आप क्या कर सकते हैं सूची बॉक्स की चौड़ाई और ऊंचाई को अपने कंटेनर के वास्तविक विडियो और वास्तविक मूल्य गुणों के लिए बाध्यकारी है, या एक कनवर्टर का उपयोग करें और उन्हें सीधे विंडो के संबंधित गुणों से बांधें।

0

मुझे आशा है कि आप नीचे दिए गए आवश्यकता है, 1) ListBox स्क्रॉल पट्टी यह उसकी सामग्री का आकार अपने मूल से भी बड़ा बढ़ता है का उपयोग करना चाहिए।

2) यदि विंडो का आकार बदल गया है, तो सूची बॉक्स को विंडो के साथ बढ़ना/हटाना चाहिए।

मैं एक साधारण उदाहरण के साथ एक ही कोशिश की है, इस की जाँच करें और अगर यह आपकी आवश्यकता से अलग है, मुझे पता है,

XAML कोड:

<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"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="30"/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <TextBlock Text="I am in Main Grid"/> 
     <ListBox Grid.Row="1" BorderBrush="BlueViolet" BorderThickness="5" Margin="10"> 
      <TextBlock Text="I am a ListBox"/> 
      <Button Content="Add Height and Width of ListBox by 100 pixels" Click="Button_Click"/> 
      <ListBoxItem Content="ListBoxItem" Background="AliceBlue" Margin="10" BorderBrush="Blue" Width="{Binding ListBoxWidth}" Height="{Binding ListBoxHeight}"/> 
     </ListBox> 
    </Grid> 
</Window> 

सी # कोड:

public partial class MainWindow : Window,INotifyPropertyChanged 
{ 
    private int m_ListBoxWidth = 350; 

    public int ListBoxWidth 
    { 
     get { return m_ListBoxWidth; } 
     set 
     { 
      m_ListBoxWidth = value; 
      OnPropertyChanged("ListBoxWidth"); 
     } 
    } 

    private int m_ListBoxHeight = 150; 

    public int ListBoxHeight 
    { 
     get { return m_ListBoxHeight; } 
     set 
     { 
      m_ListBoxHeight = value; 
      OnPropertyChanged("ListBoxHeight"); 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     ListBoxWidth += 190; 
     ListBoxHeight += 140; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
1

पोटेकरू ट्यूडर के सुझाव के बाद, मैंने सूची बॉक्स को किसी अन्य कंटेनर में लपेटकर और सूची बॉक्स की ऊँचाई को कंटेनर के वास्तविक हॉल तक बाध्य करके एक समान समस्या हल की।

यहाँ एक XAML कोड स्निपेट मदद करने के लिए है:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Border x:Name="HeightHelperPanel" Grid.Row="0"> 
     <ListBox ItemsSource="{Binding Path=FileNameCollection}" 
       MinHeight="60" 
       Height="{Binding Path=ActualHeight, ElementName=HeightHelperPanel}"/> 
    </Border> 
</Grid> 

मूल रूप से, सीमा कंटेनर भी नहीं बढ़ता है जब इसकी सामग्री होती है, लेकिन यह ग्रिड पंक्ति की ऊंचाई तक फैला रहेगी। ग्रिड पंक्ति उस विंडो को भर देगी जिसमें युक्त विंडो इसे अनुमति देगी, लेकिन खिड़की पर किसी भी ऊंचाई की बाधाओं को मजबूर नहीं करना चाहती। इसलिए सूची बॉक्स की ऊंचाई सीमा की ऊंचाई तक सीमित है।

आशा है कि किसी और की मदद करें जिसने कुछ हद तक निराशाजनक मुद्दा उठाया है।

संबंधित मुद्दे