Open display in Draw editor.
Button:
- Drag Button from toolbox
- Double Click the button and go to Settings
- Properties:
- Label Text: "Start Motor"
- Width: 120Height: 40Auto
- Click event Dynamics and check Actions:
csharp
- In Actions, choose ToggleValue
- In Object, type
@Tag.Motor1_Start
= true;Toggle Switch:
Bind to: @Tag.Motor1_Enable
On Text: "Enabled"Off Text: "Disabled"
Numeric Input:
- Drag NumericTextBox from toolbox
- Double Click the button and go to Settings
Control: NumericTextBox- Bind LinkedValue to:
@Tag.Setpoint
- MinMinValue: 0, MaxMaxValue: 100Format: "0.0"
Text Components
Text Display:
Control: - Drag TextBlock from toolbox
- Double Click the button and go to Settings
- Text : @Tagwith {Tags}: {
Tag.Temperature.ToString("F1") + " } °C"
- Font Size: On the bottom right menu set Font to 24
- Update: On tag change
Progress Bar:
ProgressBar:
- Drag ProgressBar from toolbox
- Double Click the button and go to Settings
- Bind LinkedValue toBind Value:
@Tag.Tank_Level
- Maximum: 100
- Color: Blue → Yellow → Red (by ranges)
Digital Indicator:
- Bind LinkedValue to
- On the bottom right menu set Font color to Red
Digital Gauge:
- Control: DigitalGauge
- Double Click the button and go to Settings
- Bind LinkedValue to
- Control: CheckBox (read-only)
- Bind:
@Tag.Pump_Running
Custom text: "Running
" / "Stopped"
Gauge Components
Circular Gauge:
- Add CircularGauge
- Double Click the button and go to Settings
- Bind LinkedValue toConfigure:Value:
@Tag.Pressure
- MinMinimum Value: 0, Max
- Maximum Value: 150
- Major Ticks : 10
- Ranges:
- Green: 0-100
- Yellow: 100-120
- Red: 120-150
Linear Gauge:
- Quantity: 11 (means 0 to 100)
Linear Gauge:
- Add LinearGauge
- Double Click the button and go to Settings
- Gauge Orientation: Vertical
- Height: 300
- Bind LinkedValue to:
@Tag.Tank_Level
Show scale and value
Chart Components
Trend Chart:
- Add TrendChart
- Double Click the button and go to Settings
- Configure pens:
- Pen1: Temperature TankFarm/Tank1/Temp (Blue)
- Pen2: TankFarm/Tank1/Pressure (Red)
- Time spanAuto: 1 hour
- Enable zoom/pan
- true
Pie Bar Chart:
- Data: Production by shift
- Categories: Shift 1, 2, 3
- Values: Bind to tags
- Update: Every minute
Pie Chart:
- Data source: Query result
- Value field: "Quantity"
- Label field: "Product"
DataGrid Component
- Add DataGrid
- Configure columns:
| Batch ID | Product | Quantity | Status |
- Data source options:
- Tag array
- Query result
- Script data table
- Add PieChart
- Double Click the button and go to Settings
- ChartType: Percent
- LinkedValue field:
- TankFarm/Tank1/Pressure (Blue)
- TankFarm/Tank2/Pressure (Red)
- Name field:
- Pressure Tank 1
- Pressure Tank 2
Container Components
Tab Control:
- Add TabControl
- Create tabsCreate three more pages with the following names:
Overview- TankPage1
Details- TankPage2
- Trends
- Alarms
- Add content to each tab
Group Box:
- Title: "Motor Controls"
- Border: Solid
- Add related controls inside
- TankPage3
- Go back to your MainPage and add a TabControl
- Double Click the button and go to Settings
- Under Items Source Link add three ChildDisplay components, and type the previous created display names in Linked Display
Images
Image Display:
- Add Image control
- Dynamic source:
csharp
@Tag.AlarmActive ? "alarm.png" : "normal.png"
Web Browser:
- URL: Company dashboard
- Or display PDF reports
- Find the Import File control
- Choose and image from your computer
- This image will be available to reuse once you import it the first time
Web Browser:
Advanced Interactions
ComboBox with Database:
csharp
// Populate from query
- Add ComboBox control
- In ComboBox Properties → Uid, type combo1
- Go to the page Code Behind
- Inside the DisplayOpening function, add:
TComboBox ComboBox1 = this.CurrentDisplay.GetControl("combo1") as TComboBox;
DataTable dt = await
ComboBox1.ItemsSource = @Dataset.Query.
ProductsActiveOrders.
ResultData;
ComboBox1.DisplayMember = "ProductName";
ComboBox1.ValueMember = "ProductID";SelectCommandAsync();
if(dt != null && dt.Rows.Count > 0)
{
foreach(DataRow row in dt.Rows)
{
ComboBox1.Items.Add(row["ColumnName"]);
}
}
- Consider changing the ColumnName to one of the columns of your query return
Conditional Visibility:
csharp
// Show/hide based on user level
Panel1.Visibility = @Client.UserGroup == "Supervisor"
? Visibility.Visible
: Visibility.Collapsed;
Dynamic Animations
Add dynamics to any control:
- Right-Double click control
- Select Dynamics
- Add:
- Visibility: Show/hide by condition
- PositionMoveDrag: Move based on value
- SizeScale: Resize dynamically
- ColorFillColor: Change by state
- RotationRotate: Rotate by angle
Symbols
Create reusable control sets:
- Group controls
- Right-click → Create Make New Symbol
- Add parameters
- Save to library
- Reuse across displays
- Limit controls per display
- Use Symbols
Next Steps
[Create Canvas Animations] - Advanced animations[Working with Symbols] - Reusable components- In Name type SymbolExample
- Reuse across
[Create Dashboards] - Executive - displays