2011-04-19 21 views
17

क्या शैली में या संसाधन के रूप में DataGrid कॉलम घोषित करना संभव है? मैं कुछ इस तरह करना चाहते हैं:स्टाइल या संसाधन में WPF डेटाग्रिड कॉलम

<....Resources> 
    <DataGridColumns x:Key="dgcDataGridColumns"> 
     <DataGridTextColumn /> 
     <DataGridTextColumn /> 
    </DataGridColumns 
</....Resources> 

<DataGrid Columns="{StaticResource dgcDataGridColumns}" /> 

कारण मैं 4 अलग DataGrids के लिए स्तंभ परिभाषा साझा करने के लिए है। इसे हासिल करने का कोई तरीका? बिना कोड के सर्वश्रेष्ठ होगा!

+1

मुझे लगता है कि यह डेटा ग्रिड प्रदाता पर निर्भर करता ... मुझे पता है कि Xceed datagrid संसाधनों में स्तंभों को परिभाषित करने के लिए अनुमति देते हैं, लेकिन मैं दूसरों के लिए पता नहीं है। कौन सा एक आप प्रयोग कर रहें है ? डब्ल्यूपीएफ टूलकिट एक? – Bruno

+0

मैं .NET 4 WPF DataGrid – SACO

उत्तर

20

कॉलम डेटा ग्रिड की संपत्ति तो यह संभवतः नहीं है कोई सेटर है। हालांकि आप ऐसा कुछ कर सकते हैं:

<Window.Resources> 

    <Controls:DataGrid x:Key="PersonDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding .}" x:Shared="False"> 
     <Controls:DataGrid.Columns> 
      <Controls:DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}" IsReadOnly="True"/> 
      <Controls:DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}" IsReadOnly="True"/> 
     </Controls:DataGrid.Columns> 
    </Controls:DataGrid> 

</Window.Resources> 

<StackPanel> 
    <ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Customers}"></ContentControl> 
    <ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Employees}"></ContentControl> 
</StackPanel> 
+0

ठीक है यह चाल चल रहा है। लेकिन मैं Contentcontrol की सामग्री के लिए शैली कैसे लागू कर सकता हूं (वास्तव में डेटाग्रिड में)? – SACO

+0

कृपया एक नया प्रश्न पोस्ट करें, टिप्पणियों में जवाब देने में कठोर। –

+0

http://stackoverflow.com/questions/5731276/wpf-contentcontrol- स्टाइलिंग – SACO

4

मुझे नहीं लगता कि आप कर सकते हैं, क्योंकि उस स्थिति में आप टेम्पलेट या शैली निर्दिष्ट नहीं कर रहे हैं, लेकिन वास्तविक कॉलम ऑब्जेक्ट। मुझे नहीं लगता कि डेटा ग्रिड उस तरह साझा करते समय अच्छी तरह से खेलते हैं; मुझे लगता है कि आपको "यह UIElement पहले से ही किसी अन्य UIElement का बच्चा" की सीमा तक अपवाद प्राप्त होगा।

तो मैंने निम्नलिखित की कोशिश की ... आप जो बात कर रहे हैं उसके मुकाबले थोड़ा अलग है।

{ "\ r \ nParameter नाम हैडर के साथ '' DataGridColumn पहले से ही एक डेटा ग्रिड के कॉलम संग्रह में मौजूद है datagrids कॉलम साझा नहीं कर सकते और डुप्लिकेट कॉलम उदाहरणों को शामिल नहीं कर सकते हैं:: आइटम।।"}

लेकिन मैं इस अपवाद मिला इस XAML साथ

:

  <Grid.Resources> 
      <DataGridTextColumn x:Key="MyColumn" /> 
     </Grid.Resources> 
      <DataGrid> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="MyColumn" /> 
      </DataGrid.Columns> 
     </DataGrid> 

     <DataGrid> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="MyColumn" /> 
      </DataGrid.Columns> 
     </DataGrid> 
+1

का उपयोग कर रहा हूं, इसे पोस्ट करने के लिए धन्यवाद, भले ही यह प्रश्न का उत्तर न दे। अपवाद पाठ को शामिल करने में मुझे आवश्यक उत्तर खोजने में मदद मिली (x: साझा = "गलत")। – Malachi

24

x: साझा मैटएस 423 को अपवाद से बचने में मदद करता है।

<Window.Resources> 
    <DataGridTextColumn x:Key="dgtcFirstName" x:Shared="False" Header="First Name" Binding="{Binding FirstName}"/> 
    <DataGridTextColumn x:Key="dgtcSecondName" x:Shared="False" Header="Second Name" Binding="{Binding SecondName}"/> 
</Window.Resources> 

<Grid> 
    <StackPanel> 
     <DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid1" Width="200"> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="dgtcFirstName"/> 
       <StaticResource ResourceKey="dgtcSecondName"/> 
      </DataGrid.Columns> 
     </DataGrid> 
     <DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid2" Width="200"> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="dgtcSecondName"/> 
       <StaticResource ResourceKey="dgtcFirstName"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </StackPanel> 
</Grid> 

+1

यह मेरे लिए एक ही कॉलम परिभाषाओं की प्रतिलिपि बनाने और चिपकाने से बचने के लिए एक अच्छा समाधान था। मुझे यह अजीब लगता है कि एक्स: साझा किए गए इंटेलिजेंस में साझा नहीं किया गया था, लेकिन सभी – wangburger

+0

संसाधनों पर साझा किए जाने के बारे में कभी भी नया काम नहीं करता है ... कई डेटाग्रिड्स के लिए डेटाग्रिड कॉलम का पुन: उपयोग करने सहित मेरे लिए कई समस्याएं हल करता है, बहुत धन्यवाद – TCC

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