2011-06-19 7 views
6

मुझे इस संयोजन में मेरी सूचीदृश्य को देखने के लिए ग्रिडप्लिटर के साथ समस्या है। कदम पुन: पेश करने:डब्ल्यूपीएफ सूचीदृश्य/ग्रिडप्लिटर/स्क्रोलव्यूज़र समस्या का आकार बदलें

  • प्रारंभ कार्यक्रम, विंडो का आकार बड़ा
  • खींचें लाल विभाजक खींचें सभी तरह नीले स्तंभ
  • कम करने के लिए दोनों ListView कॉलम प्रसार किया गया, जब तक वे व्यूपोर्ट और एक क्षैतिज बाहर हैं छोड़ दिया स्क्रॉल प्रकट होता है
  • खींचें विंडो का आकार छोटा होता फिर

मेरे लिए, यह धीरे-धीरे खिड़की के बाहर ListView धक्का। ध्यान दें कि स्क्रॉलव्यूयर वास्तव में विंडो के साथ आकार में कमी कर रहा है, लेकिन एक ही दर पर नहीं और धीरे-धीरे दृश्य से बाहर हो जाता है। एक बार जब स्क्रॉलव्यूवर देखने से बाहर निकलता है तो स्प्लिटर का उपयोग नहीं किया जा सकता है!

विचित्र रूप से पर्याप्त है, अगर मैं बाएं पैनल को कम नहीं करता हूं तो मुझे यह व्यवहार नहीं मिलता है!

इसके लिए क्या ठीक होगा?

<Window x:Class="LayoutTest3.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="600" Width="800" MinHeight="600" MinWidth="800" > 
    <Window.Resources> 
     <XmlDataProvider XPath="/Celebrities/Celebrity" x:Key="celebs"> 
      <x:XData> 
       <Celebrities xmlns=""> 
        <Celebrity Name="Jimmy"> 
         <LastName>Page</LastName> 
        </Celebrity> 
        <Celebrity Name="Johnny"> 
         <LastName>Depp</LastName> 
        </Celebrity> 
        <Celebrity Name="Britney"> 
         <LastName>Spears</LastName> 
        </Celebrity> 
       </Celebrities> 
      </x:XData> 
     </XmlDataProvider> 

     <DataTemplate x:Key="NameTemplate"> 
      <TextBlock Text="{Binding [email protected]}" /> 
     </DataTemplate> 
    </Window.Resources> 

    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" MinWidth="100" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="*" MinWidth="400" /> 
     </Grid.ColumnDefinitions> 
     <Border Grid.Column="0" Background="Blue" /> 
     <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch" Background="Red" /> 
     <Border Grid.Column="2" Background="Green"> 
      <ListView ItemsSource="{Binding Source={StaticResource celebs}}"> 
       <ListView.View> 
        <GridView> 
         <GridView.Columns> 
          <GridViewColumn Header="Name" CellTemplate="{StaticResource NameTemplate}" Width="150" /> 
          <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding XPath=LastName}" /> 
         </GridView.Columns> 
        </GridView> 
       </ListView.View> 
      </ListView> 
     </Border> 
    </Grid> 
</Window> 
+0

मैंने अपने जवाब में गलती की, वास्तव में स्टार-आकार को बनाए रखा गया है, 'ऑटो-साइज्ड कॉलम कंक्रीट मानों में बदल दिए गए हैं। इसके अलावा मुझे नहीं पता कि इस व्यवहार के बारे में क्या करना है, इसलिए यह एक अच्छा जवाब नहीं है। लेकिन क्या आपको यह उप-ग्रिड बनाने की ज़रूरत है? मुख्य ग्रिड में एक और कॉलम सही विस्तारक के लिए नहीं करेगा? –

+0

सब कुछ हटाने के लिए संपादित प्रश्नों को जरूरी है। – DaveO

+0

मुझे ऐसा प्रतीत नहीं होता है, आप किस WPF का लक्ष्यीकरण कर रहे हैं? – CodeNaked

उत्तर

7

एक ज्ञात अभी भी आकार दिया ग्रिड अनदेखी कॉलम के MinWidth MinWidth, GridSplitter साथ और GridSplitter के साथ समस्या यह कॉलम नहीं है। इसके परिणामस्वरूप बढ़ते कॉलम के बच्चे को वास्तव में उपलब्ध अधिक आकार मिलता है। लेकिन ग्रिड मिनीविड्थ पर विचार करने वाले बच्चों को लेता है और इस प्रकार आपका श्रिंकिंग कॉलम मिनविड्थ पर रहता है लेकिन बढ़ते कॉलम का बच्चा उस आकार के बाहर जाता है जो ग्रिडस्प्लिटर कॉलम को कम करने के मिनविड्थ से आगे चला गया है।

मैं यह पता लगाने जा रहा हूं कि मैंने इस परियोजना में से किसी एक को कैसे हल किया और मैं कोड पोस्ट करूंगा। इस बीच आप निम्नलिखित विकल्पों का प्रयास कर सकते हैं।

  1. ColumnDefinition
  2. से MinWidth निकालें बाल

को जानने के लिए MinWidth जोड़े पहले से है कि अपने ग्रिड के न्यूनतम आकार होना चाहिए 500 + स्प्लिटर के आकार, तो आप पूरे ग्रिड के MinWidth सेट कर सकते हैं।

+0

हां, मुझे लगा कि यह मिनीविड्थ अंत में समस्या का कारण बन गया था। कृपया अपना उत्तर भी पोस्ट करें ताकि हमारे पास विकल्प हों। धन्यवाद! – DaveO

2

यहां बताया गया है मैंने किया:

<Grid Name="container" SizeChanged="container_SizeChanged"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition Name="rightPanel" Width="*" MinWidth="100"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Grid.Column="0" Background="Red" Foreground="White">Test</TextBlock> 
    <GridSplitter Grid.Column="0" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="2" Height="Auto" ResizeDirection="Columns"/> 
    <Border Grid.Column="1" Background="Green" Margin="0 0 0 0"> 
     <ListView ItemsSource="{Binding Source={StaticResource celebs}}"> 
      <ListView.View> 
       <GridView> 
        <GridView.Columns> 
         <GridViewColumn Header="Name" CellTemplate="{StaticResource NameTemplate}" Width="150" /> 
         <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding XPath=LastName}" /> 
        </GridView.Columns> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Border> 
</Grid> 

और कोड के पीछे (छी!):

private void container_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    rightPanel.MaxWidth = container.ActualWidth - 150; 
} 

मूल रूप से आप मिनट चौड़ाई बाहर ले और दूसरे पर MaxWidth स्थापित करने के लिए एक समान परिकलन पैनल।

1

शायद यह मदद कर सकता है, आपको हमेशा चौड़ाई/ऊंचाई के लिए एक ही प्रकार की इकाई का उपयोग करना होगा, या स्प्लिटर सही तरीके से काम नहीं करेगा।

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1*" MinWidth="150"/> 
     <ColumnDefinition Width="4*" MinWidth="150"/> 
    </Grid.ColumnDefinitions> 

    <ListView Grid.Column="0" BorderBrush="#FF005BFF" Margin="0,0,5,0"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn /> 
      </GridView> 
     </ListView.View> 
    </ListView> 

    <GridSplitter Grid.Column="1" 
        HorizontalAlignment="Left" VerticalAlignment="Stretch" 
        Background="Black" 
        ShowsPreview="true" 
        Width="2" /> 

    <ListView Grid.Column="1" BorderBrush="#FFFF5100" Margin="5,0,0,0"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 
संबंधित मुद्दे