2010-03-18 3 views
6

यहाँ वर्तमान कोड मैं का उपयोग कर रहा है:आप पाठ को संरेखित कैसे करते हैं ताकि यह सिल्वरलाइट में एक बटन के बीच में हो?

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="ButtonPrototype.MainPage" 
    Width="640" Height="480"> 
    <UserControl.Resources> 
     <ControlTemplate x:Key="CellTemplate" TargetType="Button"> 
      <Grid> 
       <Border x:Name="CellBorderBrush" BorderBrush="Black" BorderThickness="1"> 
        <ContentPresenter 
         Content="{TemplateBinding Content}" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center"/> 
       </Border> 
      </Grid> 
     </ControlTemplate> 

     <Style x:Key="CellStyle" TargetType="Button"> 
      <Setter Property="Template" Value="{StaticResource CellTemplate}"></Setter> 
      <Setter Property="Foreground" Value="Black"></Setter> 
      <Setter Property="FontSize" Value="80"></Setter> 
      <Setter Property="Width" Value="100"></Setter> 
      <Setter Property="Height" Value="100"></Setter> 
     </Style> 
    </UserControl.Resources> 

    <Grid x:Name="LayoutRoot" Background="White"> 
     <Button Content="A" Style="{StaticResource CellStyle}"></Button> 
    </Grid> 
</UserControl> 

क्षैतिज संरेखित काम करता है लेकिन verticalalignment कुछ भी नहीं है। आपकी सहायता के लिए धन्यवाद.

उत्तर

12

समस्या यह है कि ContentPresenter के Content पर स्ट्रिंग को असाइन करके सिल्वरलाइट को स्ट्रिंग को प्रस्तुत करने के लिए TextBlock का एक फ़ॉर्म बनाने की आवश्यकता है। इसकी TextBlock की स्थिति जो ContentPresenter द्वारा प्रदान की गई लंबवत स्थान पर केंद्रित नहीं है। इस तरह के बटन को संशोधित करना: -

<Button Style="{StaticResource CellStyle}"> 
    <TextBlock Text="A" VertialAlignment="Center" /> 
</Button> 

इसे ठीक करेगा। हालांकि आप बस एक साधारण स्ट्रिंग सामग्री निर्दिष्ट करने में सक्षम होना चाहते हैं और इसे केंद्रित कर सकते हैं। उस मामले में आप अपने टेम्पलेट को संशोधित कर सकता है: -

<Border x:Name="CellBorderBrush" BorderBrush="Black" BorderThickness="1"> 
    <StackPanel VerticalAlignment="Center"HorizontalAlignment="Center"> 
     <ContentPresenter Content="{TemplateBinding Content}" /> 
    </StackPanel> 
</Border> 

एक StackPanelContentPresenter में ContentPresenter रखकर अपनी सामग्री को प्रदर्शित करने के लिए आवश्यक न्यूनतम भी ऊंचाई पर ले जाएगा द्वारा। StackPanel बदले में इसकी सामग्री की ऊंचाई केवल है और फिर यह के भीतर केंद्रित है।

यदि मैं यह बना रहे थे, यह क्या यह कैसा दिखेगा है: -

<UserControl x:Class="SilverlightApplication1.Test" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
> 
    <UserControl.Resources> 
     <ControlTemplate x:Key="CellTemplate" TargetType="Button"> 
      <Grid> 
       <Border x:Name="CellBorderBrush" 
        BorderThickness="{TemplateBinding BorderThickness}" 
        BorderBrush="{TemplateBinding BorderBrush}" /> 
       <ContentPresenter 
         x:Name="contentPresenter" 
         Content="{TemplateBinding Content}" 
         ContentTemplate="{TemplateBinding ContentTemplate}" 
         VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
         HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
         Margin="{TemplateBinding Padding}"/> 
      </Grid> 
     </ControlTemplate> 
     <Style x:Key="CellStyle" TargetType="Button"> 
      <Setter Property="Template" Value="{StaticResource CellTemplate}" /> 
      <Setter Property="Foreground" Value="Black" /> 
      <Setter Property="FontSize" Value="80" /> 
      <Setter Property="Width" Value="100" /> 
      <Setter Property="Height" Value="100" /> 
      <Setter Property="BorderBrush" Value="Black" /> 
      <Setter Property="BorderThickness" Value="1" /> 
      <Setter Property="Padding" Value="1" /> 
      <Setter Property="VerticalContentAlignment" Value="Center" /> 
      <Setter Property="HorizontalContentAlignment" Value="Center" /> 
     </Style> 
    </UserControl.Resources> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <Button Style="{StaticResource CellStyle}"> 
      <TextBlock Text="A" VerticalAlignment="Center" /> 
     </Button> 
    </Grid> 
</UserControl> 

यह बटन के लिए एक अधिक सामान्य दृष्टिकोण है। निश्चित रूप से सरल और अधिक अनुवांशिक टेम्पलेट्स का उपयोग करने के लिए यह ठीक है जब स्टाइल का उपयोग बहुत विशिष्ट स्थानीय उद्देश्यों के लिए किया जा रहा है।

6

क्या मैं का उपयोग कर रहा है कि आप अपने काम में मदद कर सकता है:

<Button Content="A" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> 
संबंधित मुद्दे

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