2015-11-06 37 views
0

你好,我想用C#WPF構建一個科學計算器。如何在調整大小小於或大於特定寬度和高度時更改表單?

我想要做的是通過調整UI大小小於或大於特定大小(具有特定寬度和高度)來將形式從簡單計算器更改爲科學計算器。

是否有關於此功能的任何文章或示例?

非常感謝。

我想說明我的想法:

像IPhone計算器,當我旋轉屏幕計算器將會是科學模式,所以這就是我想要的Windows程序,當我拖動來調整計算器,模式將會改變。

回答

0

這一個可能會被標記,因爲它不是很清楚你要問什麼。如果我的理解問題的權利,那麼你需要從你的窗口中刪除的寬度和高度參數,並設定WindowStyleSizeToContentResizeMode

<Window x:Class="GuiTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Calculator" 
    WindowStyle="SingleBorderWindow" 
    SizeToContent="WidthAndHeight" 
    ResizeMode="NoResize" FontSize="20"> 

<StackPanel Orientation="Vertical"> 
    <Border BorderBrush="Black" BorderThickness="1" Background="LightGray" HorizontalAlignment="Stretch" Height="60" Margin="5" > 
     <TextBlock Text="0" TextAlignment="Right" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Padding="5" FontSize="40" /> 
    </Border> 
    <UniformGrid Columns="4"> 
     <UniformGrid.Resources> 
      <Style TargetType="Button" > 
       <Setter Property="Margin" Value="5" /> 
       <Setter Property="Width" Value="60" /> 
       <Setter Property="Height" Value="60" /> 
      </Style> 
     </UniformGrid.Resources> 
     <Button Content="CE" /> 
     <Button Content="C" /> 
     <Button Content="&lt;" /> 
     <Button Content="÷" /> 
     <Button Content="7" /> 
     <Button Content="8" /> 
     <Button Content="9" /> 
     <Button Content="x" /> 
     <Button Content="4" /> 
     <Button Content="5" /> 
     <Button Content="6" /> 
     <Button Content="-" /> 
     <Button Content="1" /> 
     <Button Content="2" /> 
     <Button Content="3" /> 
     <Button Content="+" /> 
     <Button Content="±" /> 
     <Button Content="0" /> 
     <Button Content="." /> 
     <Button Content="=" /> 
    </UniformGrid> 
</StackPanel> 

結果是自動調整大小以內容的窗口,不能調整大小:

enter image description here

UPDATE:

噢好吧,那是非常不同的:)實際上有很多方法可以做到這一點,我將提供一個不會執行MVVM或其他任何操作的簡單方法。你需要做的就是添加控件模板TP的窗口的資源部分,每個模式和子控件來顯示他們:

<Window.Resources> 

    <ControlTemplate x:Key="Standard"> 
     <TextBlock Text="Standard Mode" /> 
    </ControlTemplate> 

    <ControlTemplate x:Key="Scientific"> 
     <TextBlock Text="Scientific Mode" /> 
    </ControlTemplate> 

</Window.Resources> 

<ContentControl x:Name="myPanel" /> 

然後,你需要添加一個SizeChanged處理器,着眼於新的大小和選擇爲控制相應的模板使用方法:

private void Window_SizeChanged(object sender, SizeChangedEventArgs e) 
    { 
     if (e.NewSize.Width > e.NewSize.Height) 
      this.myPanel.Template = this.Resources["Scientific"] as ControlTemplate; 
     else 
      this.myPanel.Template = this.Resources["Standard"] as ControlTemplate; 
    } 

拖動窗口周圍,你會看到相應控件的外觀變化。

+0

就像iPhone上的計算器一樣,當我旋轉屏幕時,計算器將處於科學模式,所以當我拖動調整計算器的大小時,這就是我想要的Windows程序,模式將會改變。 –

+0

更新了我的答案。 –

+0

非常感謝您 –

0

當我明白你的問題,

你想在一個單一的形式顯示簡單的科學計算器。並有一些選項..說按鈕..這將關閉科學計算簡單的計算。

因此,創建兩個面板..

面板1 >>保持它裏面的所有簡單計算的控制面板 2 >>保持它裏面的所有科學的控制。

當你點擊按鈕開啓/關閉簡單/科學計算

..

讓一個按鈕單擊事件和隱藏一個面板,並顯示相應等。並相應地調整窗口的大小,

<WrapPanel Name="simple" Height="300" Width="300" > 
     <StackPanel> 
      <Button Content="1" Height="23" Name="button1" Width="40" /> 
      <Button Content="4" Height="23" Name="button4" Width="40" /> 
      <Button Content="7" Height="23" Name="button7" Width="40" /> 
     </StackPanel> 
     <StackPanel> 
      <Button Content="2" Height="23" Name="button2" Width="40" /> 
      <Button Content="5" Height="23" Name="button5" Width="40" /> 
      <Button Content="8" Height="23" Name="button8" Width="40" /> 
     </StackPanel> 
    </WrapPanel> 
    <WrapPanel Name="scientific" Height="300" Width="500" > 
     <StackPanel> 
      <Button Content="1" Height="23" Name="sbutton1" Width="40" /> 
      <Button Content="4" Height="23" Name="sbutton4" Width="40" /> 
      <Button Content="7" Height="23" Name="sbutton7" Width="40" /> 
     </StackPanel> 
     <StackPanel> 
      <Button Content="2" Height="23" Name="sbutton2" Width="40" /> 
      <Button Content="5" Height="23" Name="sbutton5" Width="40" /> 
      <Button Content="8" Height="23" Name="sbutton8" Width="40" /> 
     </StackPanel> 
     <StackPanel> 
      <some more controls...> 
     </StackPanel> 
    </WrapPanel> 

上的按鈕單擊事件使用:

simple.visibility=Visibility.Hidden; 
scientific.visibility=Visibility.visible; 

,反之亦然

+0

您能否顯示一些代碼。我看不到「面板」控制,我無法想象,例如,WrapPanel1可以通過WrapPanel2。 – StepUp

+0

您可以根據您的使用使用堆疊面板或包裝紙。 –

+0

好的。如何在StackPanel2(EngineerCalculator)上顯示StackPanel1(SimpleCalculator)? – StepUp

1

我認爲你正在尋找這個

<Window x:Class="Q4.MainWindow" 
     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" 
     xmlns:local="clr-namespace:Q4" 
     mc:Ignorable="d" 
     Title="Calculator" 
    WindowStyle="SingleBorderWindow" 
    SizeToContent="WidthAndHeight" 
    ResizeMode="NoResize" FontSize="20"> 
    <StackPanel Orientation="Vertical"> 
     <Border BorderBrush="Black" BorderThickness="1" Background="LightGray" HorizontalAlignment="Stretch" Height="60" Margin="5" > 
      <TextBlock Text="0" TextAlignment="Right" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Padding="5" FontSize="40" /> 
     </Border> 
     <UniformGrid Columns="4"> 
      <UniformGrid.Resources> 
       <Style TargetType="Button" > 
        <Setter Property="Margin" Value="5" /> 
        <Setter Property="Width" Value="60" /> 
        <Setter Property="Height" Value="60" /> 
       </Style> 
      </UniformGrid.Resources> 
      <Button Content="CE" /> 
      <Button Content="C" /> 
      <Button Content="SC" Click="Button_Click"/> 
      <Button Content="÷" /> 
      <Button Content="7" /> 
      <Button Content="8" /> 
      <Button Content="9" /> 
      <Button Content="x" /> 
      <Button Content="4" /> 
      <Button Content="5" /> 
      <Button Content="6" /> 
      <Button Content="-" /> 
      <Button Content="1" /> 
      <Button Content="2" /> 
      <Button Content="3" /> 
      <Button Content="+" /> 
      <Button Content="±" /> 
      <Button Content="0" /> 
      <Button Content="." /> 
      <Button Content="=" /> 


      <Button Content="Sin" x:Name="sinBtn" Visibility="Collapsed"/> 
      <Button Content="Cos" x:Name="cosBtn" Visibility="Collapsed"/> 
      <Button Content="Log" x:Name="logBtn" Visibility="Collapsed"/> 
      <Button Content="e" x:Name="eBtn" Visibility="Collapsed"/> 
     </UniformGrid> 

    </StackPanel> 
</Window> 

而且代碼隱藏

public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      sinBtn.Visibility = Visibility.Visible; 
      cosBtn.Visibility = Visibility.Visible; 
      logBtn.Visibility = Visibility.Visible; 
      eBtn.Visibility = Visibility.Visible; 
     } 
    } 
相關問題