2011-08-11 22 views
0

首先,如果之前已詢問此問題,我表示歉意。我已經做了一些谷歌搜索,但我不確定什麼是正確的關鍵字來找到我要找的。在UserControl實例化中聲明的繼承值

基本上我的問題很容易理解。我有一個Silverlight項目和MainPage.xaml我已經聲明UserControl並給它一個高度和寬度。

<Grid> 
     <control:AlarmButton Height="50" Width="50" /> 
</Grid> 

現在內AlarmButton我有了它設置的方式我想自己的控制模板的按鈕。它現在有一個內容演示者。

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    x:Class="Alarms.AlarmButton"> 

    <UserControl.Resources> 
     <ControlTemplate x:Key="StatusButton" > 
      <Viewbox Stretch="Fill"> 
       <Grid> 
        <Path x:Name="Base" StrokeThickness="1.0" Stroke="#ff000000" StrokeMiterLimit="1.0" Fill="#ff666666" Data="F1 M 99.500,99.500 L 0.500,99.500 L 0.500,0.500 L 99.500,0.500 L 99.500,99.500 Z"/> 
        <Path x:Name="Interior" Opacity="0.5" StrokeThickness="1.0" Stroke="#ff191919" StrokeMiterLimit="1.0" Data="F1 M 97.500,97.500 L 2.500,97.500 L 2.500,2.500 L 97.500,2.500 L 97.500,97.500 Z"> 
         <Path.Fill> 
          <LinearGradientBrush MappingMode="Absolute" StartPoint="2.500,2.499" EndPoint="97.500,97.499"> 
           <LinearGradientBrush.GradientStops> 
            <GradientStop Offset="0.00" Color="#3FFFFFFF"/> 
            <GradientStop Offset="0.151" Color="Transparent"/> 
            <GradientStop Offset="1.00" Color="#BFFFFFFF"/> 
            <GradientStop Color="#53FFFFFF" Offset="0.655"/> 
           </LinearGradientBrush.GradientStops> 
           <LinearGradientBrush.Transform> 
            <MatrixTransform Matrix="1.000,0.000,-0.000,-1.000,0.000,100.000" /> 
           </LinearGradientBrush.Transform> 
          </LinearGradientBrush> 
         </Path.Fill> 
        </Path> 
        <Path x:Name="LargeShader" Opacity="0.1" Fill="#ffffffff" Data="F1 M 94.667,18.667 L 94.667,94.667 L 6.333,94.667 C 6.333,94.667 94.667,67.348 94.667,18.667 Z"/> 
        <Path x:Name="SmallShader" Opacity="0.1" Fill="#ffffffff" Data="F1 M 94.667,43.667 L 94.667,94.667 L 20.333,94.667 C 20.333,94.667 94.667,76.334 94.667,43.667 Z"/> 
        <ContentPresenter x:Name="contentPresenter" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}" 
             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
             Margin="{TemplateBinding Padding}" 
             VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Grid> 
      </Viewbox> 
     </ControlTemplate> 
    </UserControl.Resources> 

    <Grid > 
     <Button Template="{StaticResource StatusButton}" > 
      <TextBlock Text="this is a text box" 
         TextTrimming="WordEllipsis" /> 
     </Button> 
    </Grid> 


</UserControl> 

後來我將Text屬性綁定到DependencyProperty,所​​以我可以在多個文本中使用此按鈕。我想要發生的是,如果文本太大,它會將其橢圓化,並且沒有框更改或文本塊溢出。我只需要將TextBlock的高度和寬度綁定到一些值以包含它。

我的問題是這樣的; TextBlock是否可以將其高度和寬度綁定到MainPage.xaml中聲明的值?或者這比我想象的更復雜?有沒有更好的方法來解決這個問題?

編輯

這可能給什麼我試圖完成一個小的詳細信息。這是我的「按鈕」與RobSiklos'變化

Button

+0

你所需要的'TextBlock'是'ViewBox'隆重的孩子?當它短缺時它需要增長嗎? – XAMeLi

回答

0

我認爲這個問題與Viewbox有關,它告訴TextBlock它有足夠的空間。

可能消除視框就能解決問題(或者至少把ContentPresenter出視框)

+0

這是我正在尋找的解決方案。我試圖保留任何形狀的按鈕的外觀,這是Viewbox的原因。您的解決方案有點工作,但TextBlock從「按鈕」開始,這是不可取的。我想我可能只需要再多一些。 – MattMacdonald

+0

其實這是按我想要的方式工作......我只是意識到我沒有ViewBox拉伸。我不知道,我的解決方案可能不是完成所有這些的最佳方式,但我對XAML沒有真正的經驗 – MattMacdonald

0

我不知道我完全理解。你是否試圖製作文本橢圓,因爲如果文本太大,你不想讓文本塊增長?如果是這樣,您可以使用轉換器(在Text屬性的綁定語句中)使轉換器在文本長度不足的情況下返回完整文本值,或者如果文本超過了該長度,轉換器將顯示橢圓值。

+0

我已經添加了一張圖片,爲您提供更多有關正在發生的事情的信息。 – MattMacdonald

0

這應該工作: -

<Grid x:Name="LayoutGrid"> 
    <Button Template="{StaticResource StatusButton}" > 
     <TextBlock Text="this is a text box" TextTrimming="WordEllipsis" 
      Width="{Binding Parent.Width, ElementName=LayoutRoot}" 
      Height="{Binding Parent.Height, ElementName=LayoutRoot}" /> 
    </Button> 
</Grid> 

它假定一個寬度和高度來指定。另一種方法是使用UserControl的SizeChanged事件直接指定寬度和高度的值。

+0

我認爲這將工作得很好,但由於某種原因,我無法讓它工作。 – MattMacdonald